CSS diaplay=“grid“未生效与display:block

本文探讨了在CSS布局中遇到的display:grid未生效的问题。原有代码使用display:block和display:none控制界面显示,导致视频分屏显示时界面异常。通过使用v-if指令替换显示控制,并应用CSS Grid,成功解决了尺寸变化和界面布局不灵活的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、CSS grid可以通过嵌套生成更灵活的页面布局。
参考博客值得收藏的css grid构建复杂布局的小技巧!中代码示例

<p class="container">
  <p class="item">One</p>
  <p class="item">Two</p>
  <p class="item">Three</p>
  <p class="item inner-grid">
    <p class="item">i</p>
    <p class="item">ii</p>
    <p class="item">iii</p>
    <p class="item">iv</p>
    <p class="item">v</p>
    <p class="item">vi</p>
  </p>
  <p class="item">Five</p>
  <p class="item">Six</p>
</p>
.container {
   
  display: grid;
  height: 100vh;
  grid-gap: 10px;
  grid-template-columns: repeat(auto-fill, minmax(200px, auto))
}
.inner-grid {
   
  display: grid;
  background: white;
  height: 100%;
  grid-gap: 5px;
  grid-template-columns: repeat(3, auto);
}

在这里插入图片描述2、CSS diaplay="grid"未生效
需要实现视频分屏显示,但是之前同事写的代码里使用了diaplay:block和display:none这样的方法控制界面显示。当我开始添加display:grid的内容,则界面无任何变化。而且点击不同分屏按钮,视频播放器的div尺寸忽大忽小,查看浏览器的调试界面:

 <el-main>
      <el-row>
        <el-col :span="20">
          <div class="video-show1" id="div1">
            <div class="window1" alt="1"></div>
          </div>
          <div class="video-show4" id="div4" style="display: none">
            <div class="window4" alt="1"></div>
            <div class="window4" alt="2"></div>
            <div class="window4" alt="3"></div>
            <div class="window4" alt="4"></div>
          </div>
          <div class="video-show9" id="div9" style="display: none">
            <div class="window9" alt="1"></div>
            <div class="window9" alt="2"></div>
            <div class="window9" alt="3"></div>
            <div class="window9" alt="4"></div>
            <div class="window9" alt="5"></div>
            <div class="window9" alt="6"></div
### CSS `display:grid` 属性的含义 CSS 中的 `display:grid` 是一种用于创建二维布局的强大工具,它允许开发者通过行列的方式定义网格结构。当容器被设置为 `display:grid` 后,其内部的子元素会自动成为网格项(Grid Items),并遵循由父级容器设定的网格规则[^2]。 一旦设置了 `display:grid`,一些传统的布局方式如浮动 (`float`) 或者内联块显示 (`inline-block`) 将不再生效,取而代之的是基于网格系统的定位和排列机制[^3]。 --- ### 使用方法详解 #### 1. 创建基本网格 要启用网格布局,需先将某个 HTML 元素的 `display` 设置为 `grid`: ```css .container { display: grid; } ``` 这一步使得 `.container` 成为了一个网格容器 (Grid Container),它的所有直接子元素都会变成网格项目 (Grid Items)[^4]。 #### 2. 定义列宽行高 利用 `grid-template-columns` 和 `grid-template-rows` 可分别指定每一列以及每一行的具体尺寸。例如: ```css .grid-container { display: grid; grid-template-columns: 100px 200px 300px; /* 列宽度 */ grid-template-rows: auto 50px; /* 行高度 */ } ``` 这里表示该网格拥有三列,各列为 100px、200px 和 300px;同时还有两行,其中第二行为固定的高度 50px,第一行则依据内容自适应调整大小[^5]。 #### 3. 简化重复声明——使用 `repeat()` 对于具有规律性的网格设计,可以借助 `repeat()` 函数来简化代码书写过程。比如构建一个包含四列均为 150px 的单行网格可这样实现: ```css .single-row-grid { display: grid; grid-template-rows: repeat(1, 150px); grid-template-columns: repeat(4, 150px); gap: 10px; /* 统一设置行列间隙 */ } ``` 上述配置等价于手动写出四个相同宽度的列定义加上单独的一行定义[^4]。 #### 4. 自动填充空间——应用 `fr` 单位 除了绝对单位外,在 Grid Layout 中还引入了一种新的相对长度单位 —— `fractional unit (fr)` ,它可以用来分配剩余的空间给不同的轨道(track) 。下面的例子展示了如何让三个栏目平分可用区域: ```css .equal-widths-grid { display: grid; grid-template-columns: 1fr 1fr 1fr; } ``` 这意味着无论视窗大小变化否,这三个栏目的宽度始终相等,并共同占据整个父容器内的水平方向上的全部可用面积。 #### 5. 控制间隔距离——采用 `gap`, `row-gap`, `column-gap` 从现代浏览器支持情况来看,推荐优先选用标准化后的命名形式即 `gap`(通用), `row-gap`(仅作用于行间), `column-gap`(专指列之间) 来控制相邻单元之间的空白区 : ```css .gapped-grid { display: grid; grid-template-columns: ... ; grid-template-rows: ... ; gap: 8px; /* 等效于 row-gap + column-gap 都设成 8px */ row-gap: 16px; /* 如果需要特别强调某维度,则覆盖默认值 */ column-gap: 12px; } ``` 以上片段说明了三种不同类型的间距参数及其相互关系[^5]。 #### 6. 子项目的跨域放置——运用 `span` 关键字 最后值得一提的功能就是关于特定位置或者跨越多个单元格展示某些特殊组件的情况。我们可以通过组合属性像 `grid-column` / `grid-row` 并配合 `span` 实现灵活定制效果: ```css .item-spanning-two-cols { grid-column: 1 / span 2; /* 起始于第1条线结束于紧接着后面两条之后的位置 */ } .item-covering-full-width { grid-column: 1 / -1 ;/* 开始于首直线贯穿至最后一根边界线*/ } ``` 这些技巧提供了极大的灵活性去满足复杂页面需求的同时保持语义清晰易读性强的特点[^1]。 --- ### 示例综合案例 以下是一个完整的例子演示前面提到的各种概念的实际操作: ```html <div class="wrapper"> <div>One</div> <div>Two</div> <div>Three</div> <div>Four</div> <div>Five</div> </div> <style> .wrapper { display: grid; grid-template-columns: repeat(3,minmax(100px,max-content)); grid-auto-rows : minmax(min-content ,auto ); gap:.7em ; background-color:#fff ; color:#444 ; } .wrapper > div{ border-radius:.5rem ; text-align:center ; padding:.5rem ; font-size:x-large ; } @media only screen and (min-width:90ch ){ .wrapper{grid-template-columns:repeat(auto-fit,minmax(20%,1fr)); } } </style> ``` 此段HTML/CSS 结合媒体查询实现了响应式的多列布局方案。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值