CSS编入集

CSS 布局

2018-08-29  本文已影响14人  loster

经过前期的准备工作,现在就可以正确的开始布局了。这里也将是页面布局开始的地方。

常规的文档流布局

这种是最基础的布局,从上至下从左向右。

浮动布局 float

浮动的效果已经讲解过就不再赘述

定位 position

使用不同的定位方式,得到不同的效果,绝对定位调整left top right和bottom来调整位置。

css表格 display:table

还有行内table display:inline-table
使用csstable有能力让你像table一样对元素进行布局,并且更符合语义化,对屏幕阅读器的用户更加友好。
值得一提是,虽然csstable有这么多优势,但是尽量只作用于小范围内,比如表单。
当父容器设置为table时,需要针对性的对子元素设计。

table的行列合并

table中常见的 行列合,使用colspan和rowspan,但是csstable没有些属性,因此需要折返
使用table 将单元格内容拆分,再控制width,将单元格等列分布,使用百分比计算单元格宽度

  <div class="table">
    <div class="tr">
      <div class="td">
        <div class="inner-table">
          <div class="inner-tr">
            <div class="inner-td" style="width:50%"></div>
            <div class="inner-td" style="width:50%"></div>
          </div>
        </div>
      </div>
    </div>
    <div class="tr">
      <div class="td">
        <div class="inner-table">
          <div class="inner-tr">
            <div class="inner-td" style="width:100%"></div>
          </div>
        </div>
      </div>
    </div>
  </div>

嵌套table使用宽度达到满足合并列的效果,行合并也是一样的,将行分成需要的列,然后内容单独成行

比较有意思的table-caption属性,设置该元素为表格标题后,通过caption-side将标题放在表格的上面top还是下面bottom

弹性盒子 display:flex

弹性盒子最早在2009年纳入标准,现在主流的浏览器已经支持,对于webkit内核需要内核前缀-webkit-


MDN弹性盒子元素说明

父容器设置为flex后,父元素本身变成 flex container,内部的直接下级所有子元素变成flex item。

大多数情况下,弹性盒子嵌套使用,以面对更复杂的情况。

网格布局 display:grid

网格布局和一般表格一样,有行(row)列(column) 还有行列之间的空隙称之为 沟槽(gutter)或者叫间隙(gap),每一个行列覆盖的元素叫轨道track。翻译过来的命名就是很奇怪啊。
除此之外,在显示创建的网格体系中,会创立网格线,每一条网格线有相应的编号,也可以设定名称。

除了display:gird还可以设定display:inline-gird,在行内元素使用网格布局,也可以嵌套使用display:

MDN网格布局
<div class="wrapper">
      <div class="col">1</div>
      <div class="col">2</div>
      <div class="col">3</div>
      <div class="col">4</div>
      <div class="col">5</div>
      <div class="col">6</div>
</div>

当我们设定好布局为grid时,需要给grid设定模板。

显式网格设置

设定隐式网格

当template覆盖不完全时,可以使用隐式网格限定元素宽高。

子元素设定

当我们设定好网格的行列和间距后,如果想对子元素单独设定,比如合并行合并列的操作前,先了解grid line——网格线。

比如我们在白纸上画一个2行3列网格,那这个网格的在水平方向上一共4条垂直网格线,分别记为col1-col4,在垂直方向上一共三条水平网格线 ,分别记为row1-row3。


网格线

使用template表示出来就是

grid-template-columns:[col1] 20px [col2]  60px [col3] 20px [col4] ;

grid-template-rows:[row1] 20px [row2]  60px [row3] ;

定义了每一列每一列的网格线,每一行和每一行的网格线。
网格线命名可以是重名的,同一个网格线可以明名为多个名称。重名的名称在使用时,根据元素所在的位置确定名称代表的是哪一条网格线。

假设我们需要合第一行的所有列时,在水平方向上,需要擦除中间的第二条和第三条垂直网格线。因此,第一行的列的跨度就是1/4——从第一个垂直网格线到第四个垂直网格线。垂直方向上也是等同。

记住这个概念,下面就可以来合并网格内容了。

在行上也是一样的

当我们指定了元素的开始列和行的开始位置和结束位置时,元素排列的位置可能被替换掉。比如上述的 1/1/2/3 ,假设这个属性应用在第二个元素上就会发生这样的情况


grid-area:1 / 1 / 2 / 3

假如我们指定了开始位置是默认值auto,而给了结束位置,这时候就可以完成元素的位置替换操作。


grid-area: auto / auto / 3 / 4

网格线也是可以使用负数,代表从正向的对角线位置开始。上述的修改可以是 grid-area:auto/auto/-1/-1。也就是正数和倒数的区别,加上正负号以区分方向。

切换横纵坐标 grid-auto-flow

默认情况下,grid的开始方向是水平方向,使用 grid-auto-flow:column 切换为垂直方向。但是定义的模板还是按照行列排序,只是修改元素的填充方向。这一点和flex布局的flex-direction有本质的区别。


row column

当我们调试网格布局时,在chrome下可以方便的查看当前grid的排列情况,在elements里面,选中gird元素时,chrome会将当前表格的实际行列以及大小使用虚线展示出来,方便调试。


chrome调试grid
上一篇 下一篇

猜你喜欢

热点阅读