前端布局分类
固定布局
- 使用 px和pt绝对单位进行固定布局。无论在什么设备上都保持固定的尺寸,在不适合的分辨率下可能导致大面积空白或横向滚动条,常见于古老的pc端页面。
流动 Fluid
- 使用 % 百分比进行相对布局。可以根据可视区域 (viewport) 和父元素的实时尺寸进行调整,尽可能的适应各种分辨率。往往配合 max-width 等属性控制尺寸流动范围以免过大或者过小影响阅读。某些情况下可能导致错误的伸缩或者布局被破坏。
弹性 Flastic
- 使用 em 或 rem 单位进行相对布局。避免了根据 px 布局在高分辨率下几乎无法辨认的缺点,又相对 % 百分比更加灵活,同时可以支持浏览器的字体大小调整和缩放等的正常显示。
- 如果使用 em 作为尺寸单位,因为 em 相对父元素 font-size 值进行计算的特性,如果中间有对元素的字体大小进行更改,子元素的全部布局就会出错。这点现在可以很方便的通过相对于根元素的 rem 单位计量来避免。
响应式 Responsive
- 使用 @media 媒体查询 给不同尺寸和介质的设备切换不同的样式。在优秀的响应范围设计下可以给适配范围内的设备最好的体验,但是在同一个设备下实际还是固定的布局,并且因为浏览器的支持原因对介质的检测还不实用,对于不同的布局需要提供不同的布局方案。
自适应 Adaptive
- 通常使用 @media 媒体查询 和网格系统 (Grid System) 配合相对布局单位进行布局,实际上就是利用响应式、流动等上述技术通过 CSS 给单一网页不同设备返回不同样式的技术综合统称。自适应几乎已经成为优秀页面布局的标准。
float布局
1. 子元素上加float:left和width
2. 在父元素上加 .clearfix
<style>
.clearfix :after{
content:'';
diaplay:block;
clear:both;
}
.logo .nav{
float:left;
width:100px;
height:100px;
}
</style>
<body>
<header class="clearfix">
<div class="logo"></div>
<nav class="nav"></nav>
</header>
</body>
flex 布局
让一个元素变成flex容器
.container{
display:flex;
}
1. container的属性
改变items流动方向
css
.container{
flex-direction:row | row-reverse | column | column-reverse;
}
改变折行
css
.container{
flex-wrap:wrap | no-wrap | wrap-reverse
}
主轴对齐方式
css
.container{
justify-content:flex-start | flex-end | center | space-between | space-around | space-evenly
}
次轴对齐
css
.container{
align-items:stretch | flex-start | flex-end | center
}
注:align-items的值为stretch时,items项的高度不用设,直接让内容撑开即可。
2. item的属性
order
.container1{
display:flex;
flex-direction:row;
flex-wrap:wrap;
justify-content:flex-start;
}
.container1 .item{
height:30px;
background:gray;
width:30px;
boeder:1px red solid;
}
.item:first-child{
order:3
}
.item:nth-child(2){
order:2
}
注:默认情况下,item的order都是0,然后根据先后顺序进行排列。
flex-grow
.container1{
display:flex;
flex-direction:row;
flex-wrap:wrap;
justify-content:flex-start;
}
.container1 .item{
height:30px;
background:gray;
width:30px;
boeder:1px red solid;
flex-grow:1;
}
注:使用flex-item,让剩余的空间各自一等份,如果不使用flex-grow,那么item的宽度能多窄就多窄。
flex-shrink
css
.container1{
display:flex;
flex-wrap:nowrap;
justify-content:flex-start;
}
.container1 .item{
height:30px;
background:
width:130px;
flex-grow:1;
border:1px solid black
}
.item:first-child{
flex-shrink:0
}
.item:nth-child(2){
flex-shrink:10
}
.item:nth-child(3){
flex-shrink:1
}
注: flex-shrink是放置在弹性布局缩放的时候控制item的变形效果的,当flex-shrink为0的时候表示放置变瘦,flex-shrink的值越大,在伸缩时的变形效果越明显。
align-self
css
.container1{
display:flex;
flex-wrap:nowrap;
justify-content:flex-start;
}
.container1 .item{
background:
width:130px;
flex-grow:1;
border:1px solid black
}
.item:first-child{
height:100px
}
.item:nth-child(2){
height:200px;
}
.item:nth-child(3){
height:100px;
align-self:flex-end;
}
注:让其中某一项特立独行,可以使用align-self进行控制