美文网首页程序员
css grid layout 初步认识

css grid layout 初步认识

作者: 小a草 | 来源:发表于2018-08-29 12:47 被阅读0次
css grid layout 初步认识

近期在在回顾css的时候,重新学习了一下css的相关布局。
根据之前常用的布局包括

固定尺寸

布局可以从固定尺寸先了解,先构思好页面的主要结构,然后设定页面的整体大小,在页面的整体中划分小的模块进行尺寸的固定,直到整个页面布局完成。

自适应尺寸

响应式的布局的结构其实就是多个固定尺寸的组合,元素的宽度,字体的大小一般会以百分比的形式设置,通过媒体查询进行不同分辨率下的布局,

弹性盒子flex布局

弹性盒子,用来为盒子模型提供最大的灵活性,任何一个容器都可以指定为flex布局。具体访问
https://www.runoob.com/w3cnote/flex-grammar.html
https://blog.csdn.net/naruto_luoluo/article/details/51279761

虽然css grid layout 在之前自己只是听说,然而自己没有实际用过,因为之前浏览器的支持程度比较低,所以就没有去学习了解,在最近重新回顾css的时候自己在https://caniuse.com/中发现,css grid layout的支持程度已经很高了,于是自己就重新认识了一下。

IMG20180829_103613.png
什么是网格布局?

在web内容中,可以将内容分隔成多个内容块,每个内容块占据自己的空间,因此形成了一个网状的格局,类似我们在用table的时候,将其分为多个行列的单元格,形成了一个二维布局空间。

waht is css grid layout ?

css grid layout 是一个web内容的二维布局系统,它可以将你的内容按行和列进行划分,并且直接明确的指定了划分的某个内容块所处的位置空间。它所包含的基础属性名称有

grid(设定网格) , grid-template-columns(网格列) , grid-template-rows(网格行) ,grid-gap(网格间隙)

对css grid layout进行练习和认识

一,按网格线划分布局

    <div class="wrapper">
      <div class="box a">A</div>
      <div class="box b">B</div>
      <div class="box c">C</div>
      <div class="box d">D</div>
      <div class="box e">E</div>
      <div class="box f">F</div>
    </div>
    <style>
        .wrapper {
          display: grid;
          grid-template-columns: 100px 10px 100px 10px 100px 10px 100px;
          grid-template-rows: auto 10px auto 10px auto;
        }
        .box {
          background-color: #444;
          color: #fff;
          font-size: 150%;
          padding: 20px;
          text-align: center;
        }
        .a{
          grid-column: 1 / 6; 
          grid-row: 1 / 2;
        }
        .b {
          grid-column: 7 / 8; 
          grid-row: 1 / 6; 
          background: orange;
        }
        .c { 
          grid-column: 1 / 2; 
          grid-row: 3 / 4;
        }
        .d { 
          grid-column: 2 / 6; 
          grid-row: 3 / 4;
          background:red;
        }
        .e { 
          grid-column: 5 / 6; 
          grid-row: 3 / 4;
        }
        .f { 
          grid-column: 1 / 4; 
          grid-row: 5 / 6;
        }
    </style>

在上面布局中,我们设定 .wrapper{grid-template-columns: 100px 10px 100px 10px 100px 10px 100px;} 这样就将其分为7列,会有8条列网格线,设定 .wrapper{grid-template-rows: auto 10px auto 10px auto;}将其分为5行,因此形成6条行网格线。
然后设定.a{grid-column: 1 / 6; grid-row: 1 / 2;},让A块占据列网格线1-6,行网格线1-2之间的部分;同样设定.b{grid-column: 7 / 8; grid-row: 1 / 6;}让B块占据列网格线7-8,行网格线1-6,其他模块按同样的方法。

注意也可以指定已被其他块占据的网格线部分,例如效果图D块,.d{grid-column: 2 / 6; grid-row: 3 / 4;} ,这样就会出现按顺序覆盖的现象因为E块元素节点在D的后面,所以E块遮挡了D块列5-6网格线之间的部分,也可以根据自己的需求来设置z-index调整层级关系
效果图 IMG20180829_113317.png

二,按fr进行划分
下班是自己利用css grid和flex进行的一个列表布局,在这个部分中,表头固定,列表部分如果超出设定高度进行滚动

<div class="frboxauto">
        <div class="frbox">
            <div class="tabtit">A</div>
            <div class="tabtit">B</div>
            <div class="tabtit">C</div>
        </div>
        <ul class="listbox">
            <li>
                <div class="frboxcon">1</div>
                <div class="frboxcon">2</div>
                <div class="frboxcon">3</div>
            </li>
            <li>
                <div class="frboxcon">1</div>
                <div class="frboxcon">2</div>
                <div class="frboxcon">3</div>
            </li>
            <li>
                <div class="frboxcon">1</div>
                <div class="frboxcon">2</div>
                <div class="frboxcon">3</div>
            </li>
        </ul>
    </div>
    <style>
        .frboxauto{
            width:400px;
            margin:20px;
            display: flex;
            flex-direction:column;
            height:100px;
        }
        .frbox{
            display:grid;
            grid-template-columns: 1fr 2fr 1fr;
            grid-template-rows: auto;
            grid-gap:10px;
        }
        .tabtit{
            background:#444;
            color:#fff;
            text-align: center;
        }
        .listbox{
            flex:1;
            list-style-type: none;
            padding:0;
            margin:0;
            overflow-y: auto;
        }
        li{
            width:100%;
            display:grid;
            grid-template-columns: 1fr 2fr 1fr;
            grid-template-rows: auto;
            grid-gap:10px;
            background-color: #999;
            height:35px;
            line-height: 35px;
        }
        .frboxcon{
            text-align: center;
        }
    </style>

如上设置.frbox{grid-template-columns: 1fr 2fr 1fr;},将其按列分为4栏,其中中间块B占据2栏,
同样设定 li{ grid-template-columns: 1fr 2fr 1fr;}按和表头相同的栏数划分,这样便形成了一个简单的列表布局。

效果图 1234.gif

其中fr单位被用于在一系列长度值中分配剩余空间,如果多个已指定了多个部分,则剩下的空间根据各自的数字按比例分配。

有关fr资料可查找

http://www.css88.com/book/css/values/layout-specific/fr.htm

如上是自己个人对css grid layout的初步了解,希望以后再应用中有更多的认识。

相关参考资料

https://segmentfault.com/a/1190000002437544
https://segmentfault.com/a/1190000002448197
https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Grids

相关文章

网友评论

    本文标题:css grid layout 初步认识

    本文链接:https://www.haomeiwen.com/subject/iobhwftx.html