盖房子要先搭框架,写网页要先布局
布局分类
- 固定宽度布局,一般为960,1000, 1024
- 不固定宽度布局,靠文档流布局,文档流是自适应的,不需要增加格外样式
- 响应式布局:在PC上固定宽度,手机上不固定宽度
布局方式
- float布局:兼容IE9及以下,必要时使用负margin
- flex布局:不兼容IE9及以下,必要时使用负margin
- grid布局:兼容良好
float布局
- 步骤:
- 在子元素上加 float(一般为 float: left)和width
- 在父元素上加 .clearfix
- 若子元素浮动,父元素均需清除浮动,清除浮动样式写法:
.clearfix::after {content: '';display: block;clear: both;}
- 父元素只设置width,不设置height,清除浮动后,高度由子元素决定
- 一般最后一个div不设置width,使其自适应;不需要做响应式,因为手机上没有IE,float布局主要用来做IE页面
- 需要计算宽度,不灵活
- float常用布局
- 两栏布局(顶部条):一般用作header,两个子元素分别 float:left、float:right,父元素clearfix,均不需设width
- 三栏布局(内容区),四栏布局(导航):子元素都 float:left,父元素clearfix
- 平均布局(产品展示区): 在展示栏与父元素之间包一个div,设置负margin
加上 header 和 footer 即可制作所有PC页面
flex布局
查看教程:CSS TRICKS
玩游戏学习:青蛙不会跳
- flex属性分为container与items

将一个元素变成flex容器:
.container {display: flex | inline-flex;}
container 的属性:
- flex-direction: row | row-reverse | column | column-reverse;
- flex-wrap: nowrap | wrap | wrap-reverse;
- justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly;

- align-items: flex-start | flex-end | center | stretch;

- align-content: flex-start | flex-end | center | stretch| space-between | space-around;

- items 的属性:
- order
- flex-grow
- flex-shrink: 默认为1,0为防止变瘦
- align-self: 设置单个item的align-items
- flex常用布局
- 两栏布局(顶部条):
- 三栏布局(内容区),四栏布局(导航):
- 平均布局(产品展示区):
Grid布局
查看教程:CSS TRICKS
玩游戏学习:我爱种萝卜
- 一维布局用flex,二维布局用Grid
- Grid属性分为container与items
- 将一个元素变为Grid容器:
.container {display: grid | inline-grid;}
container 的属性:
grid-template-columns & grid-template-rows:设置格子的行和列的个数与占用空间大小
.container {grid-template-columns: 40px 50px auto 50px 40px;grid-template-rows: 25% 100px auto;/* 还可以设置 1fr, 2fr... : The free space is calculated after any non-flexible items */}

grid-template-areas: 设置方格名字 ```css .item-a { grid-area: header; } .item-b { grid-area: main; } .item-c { grid-area: sidebar; } .item-d { grid-area: footer; }
.container { display: grid; grid-template-columns: 50px 50px 50px 50px; grid-template-rows: auto; grid-template-areas: “header header header header” “main main . sidebar” “footer footer footer footer”; }
- gap:column-gap | row-gap<br />好累不想写了<a name="a15d9798"></a>### 举个栗子分别用三种布局方式完成下面的猪猪展示区(平均布局)<br />- float布局```html<!DOCTYPE html><html><head><meta charset="utf-8"><title>baby image</title><style>.image-list {width: 620px;border: 1px solid blue;}.image-wrapper {margin-right: -10px; /* 负margin */}.image {width: 200px;height: 200px;float: left;margin-right: 10px;margin-top: 5px;background-color: pink;}.clearfix::after {content: '';display: block;clear: both;}</style></head><body><div class="image-list"><div class="image-wrapper clearfix"><div class="image"> 猪胖胖 </div><div class="image"> 猪萌萌 </div><div class="image"> 猪妮妮 </div><div class="image"> 猪丫丫 </div><div class="image"> 猪崽崽 </div><div class="image"> 猪宝宝 </div></div></div></body></html>
- flex布局
<!DOCTYPE html><html><head><meta charset="utf-8"><title>baby image</title><style>.image-list {width: 620px;border: 1px solid blue;}.image-wrapper {display: flex;flex-wrap: wrap;margin-right: -10px;}.image {width: 200px;height: 200px;margin-right: 10px;margin-top: 5px;background-color: pink;}</style></head><body><div class="image-list"><div class="image-wrapper"><div class="image"> 猪胖胖 </div><div class="image"> 猪萌萌 </div><div class="image"> 猪妮妮 </div><div class="image"> 猪丫丫 </div><div class="image"> 猪崽崽 </div><div class="image"> 猪宝宝 </div></div></div></body></html>
- Grid布局:使用Grid实现的布局第一行格子与父元素的边框之间没有空隙,因为不需要设margin-top
<!DOCTYPE html><html><head><meta charset="utf-8"><title>baby image</title><style>.image-list {display: inline-grid;border: 1px solid blue;grid-template-rows: repeat(2,200px);grid-template-columns: repeat(3,200px);grid-template-areas:"zhu-pp zhu-mm zhu-nn""zhu-yy zhu-zz zhu-bb";row-gap: 10px;column-gap: 10px;}.image {background-color: pink;}.image-list > .image:first-child{grid-area: zhu-pp;}.image-list > .image:nth-child(2){grid-area: zhu-mm;}.image-list > .image:nth-child(3){grid-area: zhu-nn;}.image-list > .image:nth-child(4){grid-area: zhu-yy;}.image-list > .image:nth-child(5){grid-area: zhu-zz;}.image-list > .image:nth-child(6){grid-area: zhu-bb;}</style></head><body><div class="image-list"><div class="image"> 猪胖胖 </div><div class="image"> 猪萌萌 </div><div class="image"> 猪妮妮 </div><div class="image"> 猪丫丫 </div><div class="image"> 猪崽崽 </div><div class="image"> 猪宝宝 </div></div></body></html>
画图软件
Balsamiq,Figma,墨刀,Adobe XD
布局小技巧
- 使用border-box,border会占用位置,干扰布局,可把border改成outline,不占用位置
div {outline:1px solid black;}
- 设置自动居中:
div {margin: 0 auto;}
最好设置为
div {margin-left: auto;margin-right: auto;}
因为如果其他地方设置了margin-top就不会被覆盖。由于CSS是层叠样式表,因此写CSS的原则之一为:不需要设置的就不设置
- 尽量不要把宽度写死,如 width: 100px;
最好写灵活一点: width: 10% | 10vw; max-width:100px; min-width: 100px
