CSS3布局(前端所必须要掌握)

CSS布局

传统方案是基于盒装模型,依赖display属性+position属性+float属性,但对于一些特殊布局(eg:垂直居中)就不容易实现。

补充:
块元素:出现在另一个元素下面的元素;
内联元素:出现在另一个元素旁边的元素,就像段落中的单个单词一样;

dispaly属性一些默认的display的值,段落之间样式默认值为:display:block<a>元素默认为display:inline
注:display:flexdisplay:grid在布局上比较重要。

1、Flex布局

  • 弹性盒子(Flexbox)
    用于创建横向/纵向的一维页面布局,在其父元素上应用display:flex,所有直接子元素机会按照flex进行布局,但是子元素的float,clear,vertical-align属性将失效。

任何一个容器都可指定为flex布局。

.box {
 display: flex;
}
<div class="box">
 <div class="box1">one</div>
 <div class="box2">two</div>
 <div class="box3">three</div>
</div>
.box {
 display: flex;
}
.box > div {
 flex:1
}
<div class="box">
 <div class="box1">one</div>
 <div class="box2">two</div>
 <div class="box3">three</div>
</div>
.container{
 display:flex;
 flex-wrap: wrap; /*可换行*/
 justify-content:center;
}
.item{
 flex: 0 1 150px;
 margin: 5px; /*外边距*/
}

flex:是flex-growflex-shrinkflex-basis的合并形式。

2、Grid布局

用于同时在两个维度把元素按行和列排列整齐。grad-template-rowsgrid-template-columns定义了行和列的轨道。grid-gap定义了网格间的间距。

Grid 布局只对项目生效,不对项目子元素起作用。

如下代码:

.box {
 display:grid;
 grid-template-columns: 1fr 1fr 1fr;
 grad-template-rows: 100px 100px;
 grid-gap:10px;
}
<div class="box">
 <div class="box1">one</div>
 <div class="box2">two</div>
 <div class="box3">three</div>
 <div class="box1">one</div>
 <div class="box2">two</div>
</div>

注:
a.fr单位跨网格轨道可用空间的分布。上面代码中有着3个大小为1fr的轨道的网格容器,创建了三个列轨道;
b.若最后一个是2fr,则表示最后一个轨道是前者的二倍;
c.还可以与绝对单位结合使用,eg:
grid-template-columns: 150px 1fr 2fr;表示第一列宽是150像素,第三列宽是第二列宽的2倍;
d.grid-template-columns: 150px auto 150px;auto表示由浏览器自己决定

  • 默认情况下,容器元素都是块级元素,但也可以设为行内元素。如下代码,就是指定了div是一个行内元素,该元素内部采用网格布局:
    div{display: inline-grid;}
    注:设为网格布局后,容器子元素(项目)的floatdisplay:inline-blockdisplay:table-cellvertical-aligncolumn-*
    设置都将失效。
  • 容器指定了网格布局后,就要划分行和列了。
    列宽:grid-template-columns
    行高:grid-template-rows

代码如下:

.container {
 display:grid;
 grid-template-columns:100px 100px 100px;
 grid-template-rows:100px 100px 100px;
}

上面代码指定了一个三行三列的网格,列和宽都是100px,当然也可用百分比;
或用repeat(3,100px)也可;
或用repeat(auto-fill,100px),当容器大小不确定时可以用。

  • 比较常用的布局
    两栏布局:
grid-template-columns: minmax(150px,25%) 1fr;

表示第一列宽度最小为150px,最大宽度为总宽度的25%

三明治布局
grid-template-rows:auto 1fr auto;
垂直划分为上中下三部分(页眉、内容区、页脚),页眉和页脚都是本来的内容高度,内容区是剩下所有的高度。

圣杯布局(最常用)
是将三明治布局中的内容区分成三部分(左边栏、主栏、右边栏)

html代码

<div class="container">
 <header/>
 <div>
 <main/>
 <div/>
 <footer/>
</div>

CSS代码:

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

表示垂直方向(页眉和页脚都是本身内容高度,内容区占满剩余的高度),水平方向(左边栏和右边栏都是本身内容高度,中间主栏占满剩余的高度)。

十二网格布局

grid-template-columns: repeat(12, 1fr);

一些常用的网格属性

  • 行间距:grid-row-gap

  • 列间距:gid-column-gap

  • 合并写法:grid-gap

  • 设置单元格内容的水平位置:justify-items

  • 设置单元格内容的垂直位置:align-items

  • 合并写法:place-items

  • 整个内容区域在容器里面的水平位置:justify-content

  • 整个内容区域在容器里面的垂直位置:align-content

  • 合并写法:place-content

  • grid-column:1/3等同于grid-column: 1/span 2表示从第一根列线到第三根列线(即第一列和第二列)

  • grid-row:1/span 2,第一根行线,横跨两个网格,(即表示第一行和第二行)

  • grid-area:指定项目放在哪个区域

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349