1.布局是什么
1.1.布局的分类
1.1.1.固定宽度布局
1.1.2.不固定宽度布局
1.1.3.响应式布局
意思就是PC上固定宽度,手机上不固定宽度(也就是一种混合布局)
1.2.布局的两种方式
1.2.1.从大到小
- 先定下大局
- 再完善每个部分的小布局
-
1.2.2.从小到大
先完成小布局
- 再组合成大布局
-
2.布局需要用到哪些属性
2.1. float 布局
float 示例代码
2.1.1.步骤
子元素上加
float:left和width父元素上加
.clearfix.clearfix::after{content:'';display:block;clear:both;}
2.1.2.经验(没有为什么,都是前辈的经验)
有经验者会留一些空间或者最后一个不设
width而是设一个max-width- 不需要做响应式,因为手机上没有IE,而这个布局是专门给IE准备的
- IE 6/7 存在双倍
margin的 bug,解决办法两个:
① 将错就错,针对 IE 6/7 把 margin 减半

其他浏览器只会识别图中第十五行,而 IE 6/7 会识别第十六行,在前面加 _ 或者 * 都可以
②神来一笔,再加一个 display:inline block (即在 margin 后面再加这么一句即可)
2.1.3.实践
2.1.3.1.不同的布局
- 用 float 做两栏布局(如顶部条)
- 用 float 做三栏布局(如内容区)
- 用 float 做四栏布局(如导航)
- 用 float 做平均布局(如产品展示区)( float 里最难的布局)
2.1.3.2.经验
- 加上头尾(header 和 footer),即可满足所有 PC 页面需求
- float 要程序员自己计算宽度,不灵活,手机页面不用 float,用来对付 IE 足以
图片下面有多余的背景色时加
vertical-align: top;就会消失
设置字体高度示例
line-height:32px;
当 border 影响布局,占了2px时可以把 border 换成 outline
前提是个块级元素,内容要居中,左右 margin 都设置 auto 即可(提示不要写成
margin: 0 auto;这个表示上下 margin 为0 左右为 auto ,我们只需要左右 auto 即可,不要写多余的,因为也不知道别的地方 margin 是否为 0 )
必要时加负 margin

总的 width=800px,图片 width=191px,间距 width=12px,这时第四张图右边也会有个12px的间距所以导致加起来的 width=812px,这时需要用到 -margin
①先在imagelist 下加个 div 命名为 x 包裹住image(注意加了之后 x 为image的父元素,clearfix 需要换到 x 上)
<div class="imagelist"><div class="x 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 class="image"></div></div></div>
2.2.flex 布局
- 教程 (来自 CSS Tricks)
完成 Flex青蛙游戏
flex 示例代码
2.2.1.容器 container
2.2.2. flex container 有哪些样式
2.2.2.1.让一个元素变成 flex 容器.container{ display: flex;/ or inline-flex/ }
2.2.2.2.改变 items 流动方向(主轴)
2.2.2.3.改变折行
2.2.2.4.主轴对齐方式
2.2.2.5.次轴对齐
2.2.2.6.多行内容
2.2.3.flex item 有哪些属性
2.2.3.1. item上面加 order(补充了个选择器内容)
补充个选择器(第一个用first,中间用 nth(序号),最后一个用 last 并且冒号左右不能有空格)
item:first-child{order:1}item:nth-child(2){order:4}item:nth-child(3){order:2}item:last-child{order:3}
2.2.3.2. item上面加 flex-grow
2.2.3.3. item上面加 flex-shrink
控制自己如何变瘦
一般写flex-shrink:0防止变瘦,默认是12.2.3.4. item上面加 flex-basis
2.2.3.5.缩写 空格隔开
flex:flex-grow flex-shrink flex-basis其他缩写:flex-direction和flex-wrap两个属性经常会一起使用,所以有缩写属性flex-flow
2.2.3.6.align-self 定制 align-items(用的很少)
2.2.3.7.重点需要记住的
2.2.3.8.经验
永远不要把 width 和 height 写死,除非特殊说明
- 用 min-width / max-width / min-height / max-height
- flex 和 margin-xxx:auto 配合有意外效果
前端戒律:必须先给设计稿;没有设计稿就自己画,老板同意再写代码
2.2.3.9.什么叫写死
写死
width:200px
- 不写死(特点:不使用 px ,或者加前缀 min/max)
width:50%
max-width:100px
width:30vw
min-width:80%
2.2.3.10.常用草图软件
- Balsamiq
- Figma
- 墨刀
-
2.3.Grid 布局
功能最强大的布局,二维布局用 Grid ,一维布局用 Flex
- 以下内容参考 CSS Tricks
- A Complete Guide to Grid
- Grid 也分 container 和 items
-
2.3.1.container
2.3.1.1.成为 container
.container{display: grid | inline-grid;}
2.3.1.2.行和列
.container{grid-template-columns: 40px 50px auto 50px 40px;grid-template-rows: 25% 100px auto;}
2.3.1.3.还可以给每条线取名字
2.3.1.4.取名的作用-item 可以设置范围
.item-a{grid-column-start: 2;grid-column-end: five;grid-row-start: row1-start;grid-row-end: 3;}
根据以上内容写个简单的示例
2.3.1.5.fr-free space 巧记:份


简单示例:用到了 fr 和空隙 grap2.3.1.6.分区 grid-template-areas (适合衣柜式布局)
2.3.1.7.空隙 gap
2.3.1.8.缩写
grid-column: 2 / 4;相当于grid-column-start:2;grid-column-end:4;grid-row: 2 / 4;相当于grid-row-start:2;grid-row-end:4;grid-area属性接受4个由’/‘分开的值:grid-row-start, grid-column-start, grid-row-end, 最后是grid-column-end。grid-template是grid-template-rows和grid-template-columns的缩写形式。比如说,grid-template: 50% 50% / 200px;将创建一个具有两行的网格,每一行占据50%,以及一个200像素宽的列。
根据网格的开始和结束位置来定义一个网格项,你也可以用span关键词来指定你所要跨越的宽度。请注意span只能是正值。
比如:grid-column-start: 2;grid-column-end: span 2;相当于从第二列开始结束于第四列。
- 另外
grid-column-end:可以为负数,倒着数
资料来源:饥人谷




