300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 介绍几种布局方式flex布局 table布局 grid布局等

介绍几种布局方式flex布局 table布局 grid布局等

时间:2022-04-07 08:06:49

相关推荐

介绍几种布局方式flex布局 table布局 grid布局等

Flex布局

由于传统的布局方式是基于传统解决案是基于盒状模型,依赖 display属性 + position属性 + float属性。它对于那些特殊布局非常不方便,于是在,W3C提出了一种新的方案----Flex布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。

基本概念

采用Flex布局的元素,称为Flex容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为Flex项目(flex item),简称"项目"。

容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。

项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。

基本属性介绍

容器的属性

主轴排列方向:左(默认)、右、上、下

.box {flex-direction: row | row-reverse | column | column-reverse;}

主轴是否换行:不换行(默认)、换行,第一行在上方、换行,第一行在下方

.box{flex-wrap: nowrap | wrap | wrap-reverse;}

主轴对齐方式:左对齐(默认)、右对齐、居中、两端对齐,项目之间的间隔都相等、每个项目两侧的间隔相等(项目之间的间隔比项目与边框的间隔大一倍)

.box {justify-content: flex-start | flex-end | center | space-between | space-around;}

交叉轴对齐方式(垂直方向):交叉轴的起点对齐、交叉轴的终点对齐、交叉轴的中点对齐、项目的第一行文字的基线对齐、如果项目未设置高度或设为auto,将占满整个容器的高度(默认)

.box {align-items: flex-start | flex-end | center | baseline | stretch;}

多根轴线的对齐方式:交叉轴的起点对齐、交叉轴的终点对齐、与交叉轴的中点对齐、与交叉轴两端对齐,轴线之间的间隔平均分布、每根轴线两侧的间隔都相等(轴线之间的间隔比轴线与边框的间隔大一倍)、轴线占满整个交叉轴(默认)

.box {align-content: flex-start | flex-end | center | space-between | space-around | stretch;}

flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。

.box {flex-flow: <flex-direction> || <flex-wrap>;}

项目属性

项目的排列顺序:数值越小,排列越靠前,默认为0。

.item {order: <integer>;}

项目的放大比例:默认为0,即如果存在剩余空间,也不放大。如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

.item {flex-grow: <number>; /* default 0 */}

项目的缩小比例:默认为1,即如果空间不足,该项目将缩小。如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。负值对该属性无效。

.item {flex-shrink: <number>; /* default 1 */}

在分配多余空间之前,项目占据的主轴空间:浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。

.item {flex-basis: <length> | auto; /* default auto */}

允许单个项目有与其他项目不一样的对齐方式: 可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

.item {align-self: auto | flex-start | flex-end | center | baseline | stretch;}

flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。

.item {flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]}

Table布局

基本属性介绍

空间平均划分:子级容器默认是自动平分宽度沾满父级容器

.box{display: table;}.left,.right{display: table-cell;}

设置其中一个table-cell为固定宽度:如果固定好其中一个子级容器,那么其余子级容器会自动平分宽度沾满父级容器设置每一个table-cell为固定宽度:所有子元素会均分垂直居中:把此元素放置在父元素的中部:vertical-align:middle等高对齐:如果要实现不管两个box哪个高度产生变化另一个就跟随,只需要把右侧的box也设置成display:table-cell就可以实现了。

优缺点

缺点:

table 比其他html标签占更多的字节。造成下载时间延迟,占用服务器更多的流量资源(代码冗余)。table 会阻挡浏览其渲染引擎的渲染顺序,会延迟页面的生成速度,让用户等待时间更久。灵活性差,一旦设计确定,后期很难通过CSS让它展现新的面貌。不利于搜索引擎抓取信息,直接影响到网站的排名。

优点:

兼容性好、容易上手

Grid布局

基本概念

它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。以前,只能通过复杂的 CSS 框架达到的效果,现在浏览器内置了。Grid 布局则是将容器划分成"行"和"列",产生单元格,然后指定"项目所在"的单元格,可以看作是二维布局。Grid 布局远比 Flex 布局强大。

基本属性介绍

划分行和列:

.container {display: grid;grid-template-columns: 33.33% 33.33% 33.33%;grid-template-rows: 33.33% 33.33% 33.33%;}

关键字:repeat()、auto-fill、fr 、minmax()、auto、网格线的名称、布局实例

repeat()接受两个参数,第一个参数是重复的次数(上例是3),第二个参数是所要重复的值。repeat()重复某种模式也是可以的。

.container {display: grid;grid-template-columns: repeat(3, 33.33%);grid-template-rows: repeat(3, 33.33%);}

每一行(或每一列)容纳尽可能多的单元格,这时可以使用auto-fill关键字表示自动填充。

.container {display: grid;grid-template-columns: repeat(auto-fill, 100px);}

为了方便表示比例关系,网格布局提供了fr关键字(fraction

的缩写,意为"片段")。如果两列的宽度分别为1fr和2fr,就表示后者是前者的两倍。

.container {display: grid;grid-template-columns: 1fr 1fr;}

fr可以与绝对长度的单位结合使用,这时会非常方便。

.container {display: grid;grid-template-columns: 150px 1fr 2fr;}

minmax()函数产生一个长度范围,表示长度就在这个范围之中。它接受两个参数,分别为最小值和最大值。

grid-template-columns: 1fr 1fr minmax(100px, 1fr);//minmax(100px, 1fr)表示列宽不小于100px,不大于1fr。

auto关键字表示由浏览器自己决定长度。

grid-template-columns: 100px auto 100px;//上面代码中,第二列的宽度,基本上等于该列单元格的最大宽度,除非单元格内容设置了min-width,且这个值大于最大宽度。

网格线的名称:grid-template-columns属性和grid-template-rows属性里面,还可以使用方括号,指定每一根网格线的名字,方便以后的引用

.container {display: grid;grid-template-columns: [c1] 100px [c2] 100px [c3] auto [c4];grid-template-rows: [r1] 100px [r2] 100px [r3] auto [r4];}//上面代码指定网格布局为3行 x 3列,因此有4根垂直网格线和4根水平网格线。方括号里面依次是这八根线的名字。网格布局允许同一根线有多个名字,比如[fifth-line row-5]。

布局实例:grid-template-columns属性对于网页布局非常有用。两栏式布局只需要一行代码。同时传统的十二网格布局,写起来也很容易。

.wrapper {display: grid;grid-template-columns: 70% 30%;}grid-template-columns: repeat(12, 1fr);

Grid布局的参考网址

/blog//03/grid-layout-tutorial.html

太多了,有点码不动了。

未完待续,敬请期待。

以后还有更多布局会分享给大家。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。