13. CSS布局(上)
CSS
13. CSS布局(上)
布局是什么
把页面分成一块一块,按左中右,上中下等排列
布局分类
两种
固定宽度布局,一般宽度为960/1000/1024px(都是8的倍数)
不固定宽度布局,主要靠文档流的原理来布局
还记得吗
文档流本来就是自适应的,不需要加额外的样式
第三种布局
响应式布局
意思就是PC上固定宽度,手机上不固定宽度
也就是一种混合布局
布局的两种思路
从大到小
先定下大局
然后完善每个部分的小布局
从小到大
先完成小布局
然后组合成大布局
两种均可
新人推荐用第二种,因为小的简单
老手一般用第一种,因为熟练有大局观
布局需要用到哪些属性?
不多逼逼,直接给你所有套路
Float布局
步骤
子元素上加float:left和width
在父元素上加.clearfix(忘了加被方方看到你就完了)
为什么要加.clearfix?看第二张不加的图,加了之后header可以把div和nav都包裹住。
如果想让div和nav之间有点空隙
把float:left改成float:right
如何让两个标题居中对齐?
经验
有经验者会留一些空间或者最后一个不设width
下图.user就没有设置width,设置max-width文字会跑出来
手机上不需要做响应式,因为手机上没有IE,而这个布局是专门为IE准备的
下面的css在IE6/7浏览器会自动把margin双倍显示
IE6/7存在双倍margin bug,解决方法有两个
一是将错就错,针对IE6/7把margin减半
二是神来一笔,再加一个display:inline-block
不要问为什么
面试官问:你会不会兼容IE,举个例子
答:会。我们用float布局的时候,如果写了一个margin-left,IE6/7会变成双倍,有两种方法可以解决,一种是将复制减半,或者使用display:inline-block即可。
代码链接:https://jsbin.com/kexuzar/edit?html,css,output
实践
不同布局
用float做两栏布局(如顶部条)
用float做三栏布局(如内容区)
用float做四栏布局(如导航)
用float做平局布局(如产品展示区)
曾经淘宝的前端发明了双飞翼布局,不要学,已过时
经验
加上头尾,即可满足所有PC页面需求
手机页面傻子采用float
float要程序员自己计算宽度,不灵活
float用来应付IE足以
问:老师你说float适合ie,但是你刚刚是chrome啊,是我理解不对吗
回答
问:如果logo和nav的高度不固定,还能用margin-top:5px吗
回答
问:父div宽度800,四个子元素宽度分别191,不是还有border 1px吗,所以四个加起来的宽度就不止764了吧
Flex布局上
教程(来自CSS Tricks)
把教程过一遍,然后忘掉
完成Flex青蛙游戏
开始用flex!
缩写用约定俗成的,未经约定俗成的不要用,比如将container缩写成cnt
容器containter
container用做父元素
flex container有哪些样式?
以下内容都是container的样式
让一个元素变成flex容器
改变items流动方向(主轴)
默认flex-direction:row
弹性流,即一字排开
控制什么方向,主轴就是什么方向
改变折行
flex-wrap
指定 flex 元素单行显示还是多行显示 。如果允许换行,这个属性允许你控制行的堆叠方向。初始值是nowrap
如果本来item设置了宽度,一旦多了会被挤压,比如下图
如果还是想维持原来的width,也不想被挤压,就通过
flex-wrap:wrap
,如下图
flex-wrap:wrap-reverse
主轴对齐方式
默认主轴是横轴,除非你改变了flex-direction方向
默认是justify-content:flex-start
默认靠左
靠右
居中
不居中,不靠右也不靠左,把space空间放到间隙中
把空间放到周围,space-around
次轴对齐
默认次轴是纵轴,当高度不一样时,需要做次轴对齐,
align-items:flex-start
是默认值,向上对齐
align-items:flex-start
align-items:center
align-items:flex-end
align-items:stretch
就是默认一样高,stretch就是衍生
baseline比较少用
多行内容
如果container的高度是400px,默认里面的每一行的高度就是平均分,默认是stretch
align-content:flex-start
把多余的行高全部放下面
align-content:flex-end
把多余的行高放上面
align-content:center
把多余的行高放两遍
align-content:stretch
align-content:space-between
align-content:space-around
这个属性基本不用
item上面加order
数字越大越往后排,数字越小越靠前,数字为负也是靠前
item上面加flex-grow
控制自己如何长胖
flex-shrink控制如何变瘦
一般写flex-shrink:0防止变瘦,默认是1
如果使用flex-shrink的话,需要设置宽度,以及nowrap,这样能明显看到变化
flex-basis控制基准宽度
默认是auto
就是宽度的意思,用的不多
flex:flex-grow flex-shrink flex-basis
缩写,空格隔开
align-self定制align-items
用来调整单个的item
flex所有属性讲完
忘掉它,开始干
重点
记住这些代码
工作中基本只用这些
Flex小游戏
https://flexboxfroggy.com/#zh-cn
前端的底线
上课的示例代码
草图软件推荐
Balsamiq
Figma
墨刀
Adobe XD
特点
直接干,不用学
如何在两套布局中切换
后面的课程单独讲,主要使用@media媒体查询
实践
不同布局
用flex做两栏布局
用flex做三栏布局
用flex做四栏布局
用flex做平均布局
用flex组合使用,做更复杂的布局
经验
永远不要把width和height写死,除非特殊说明
用min-width/max-width/min-height/max-height
flex可以基本满足所有需求
flex和margin-xxx:auto配合有意外的效果
什么叫写死
写死
不写死
特点:不使用px,或者加min max前缀
最后更新于
这有帮助吗?