目录
3.2.6 align-content 和 align-items 的区别
一、百分比布局
1.1 视口
1.1.1 ideal viewport 理想视口
理想视口就是最理想的视口尺寸。需要添加 meta 视口标签通知浏览器操作,最主要是保证和理想视口的宽度保持一致。
属性 | 说明 |
---|---|
width | 宽度设置的是 viewport 宽度,可以设置 device-width 特殊值 |
initial-scale | 初始缩放比,大于0的数字 |
maximum-scale | 最大缩放比,大于0的数字 |
minimum-scale | 最小缩放比,大于0的数字 |
user-scalable | 用户是否可以缩放,yes 或 no(1 或 0) |
<meta
name="viewport"
content="width=device-width,
user-scalable=no,
initial-scale=1.0,
maximum-scale=1.0,
minimum-scale=1.0"
/>
1.2 background-size
background-size 是 css3 新出来的属性,值可以是具体像素、百分比或者 cover、contain
两个参数:
100px 200px 代表背景图的大小是宽度 100px 高度 200px
一个参数:
100px 代表宽高都是 100px
cover:图片的宽度和高度会拉伸,自动铺满容器,会溢出,部分背景图显示不全
contain:图片的宽度和高度会拉伸,宽度达到临界点以后,高度还会再拉伸,所以容易出现部分空白
<style>
#box {
width: 200px;
height: 200px;
border: 1px solid #000;
background: url(images/01.png) no-repeat;
background-size: contain/cover/100px 200px;
}
</style>
</head>
<body>
<div id="box"></div>
</body>
二、移动端开发
2.1 移动端开发的几种解决方案:
2.1.1 单独制作移动端页面
-
流式布局
-
flex 伸缩布局
-
less + rem + 媒体查询
-
混合布局
2.1.2 响应式页面
响应式页面最有代表性的就是用我们前面学过的bootstrap框架实现,就是相对来说修改比较麻烦,现在主流的还是单独制作移动端页面比较多。
-
媒体查询
-
bootstrap
2.2 百分比布局
流式布局也就是百分比布局最主要的是把容器的宽度设置成百分比,然后里面的内容就可以*伸缩了。
<style>
* {
margin: 0;
padding: 0;
}
header {
width: 100%;
height: 400px;
margin: 0 auto;
/* 设置最大宽 */
max-width: 750px;
/* 设置最小宽度 */
min-width: 320px;
}
section:nth-child(1) {
width: 50%;
height: 400px;
background-color: red;
float: left;
}
section:nth-child(2) {
width: 50%;
height: 400px;
background-color: yellow;
float: left;
}
</style>
</head>
<body>
<header>
<section>11</section>
<section>22</section>
</header>
三、伸缩布局
3.1 flex 布局详解
-
flex 是 flexible box 的缩写,意为“弹性布局”,用来为盒装模型提供最大的灵活性
-
任何一个容器都可以指定为 flex 布局
-
当为父盒子设为 flex 布局以后,子元素的 float、clear 和 vertical-align 属性将失效
-
采用Flex布局的元素,称为Flex容器(flex container),简称”容器”。它的所有子元素自动成为容器成员,称为Flex项目(flex item),简称”项目”。
-
容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。
-
项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。
3.2 父项常见的属性
属性 | 说明 |
---|---|
flex-direction | 设置主轴的方向 |
justify-content | 设置主轴上子元素的排列方式 |
flex-wrap | 设置子元素是否换行 |
align-content | 设置侧轴上子元素的排列方式(多行) |
align-items | 设置侧轴上子元素的排列方式(单行) |
flex-flow | 复合属性,相当于同时设置了 flex-direction 和 flex-wrap |
3.2.1 flex-direction 属性
flex-direction属性决定主轴的方向(即项目的排列方向)
.box {
flex-direction: row | row-reverse | column | column-reverse;
}
属性 | 说明 |
---|---|
row(默认值) | 主轴为水平方向,从左到右 |
row-reverse | 主轴为水平方向,从右到左 |
column | 主轴为垂直方向,从上到下 |
column-reverse | 主轴为垂直方向,从下到上 |
3.2.2 justify-content 属性
justify-content 属性定义了项目在主轴上的对齐方式
.box {
justify-content: flex-start | flex-end | center | space-between | space-around;
}
具体对齐方式与轴的方向有关。下面假设主轴是从左到右
属性 | 说明 |
---|---|
flex-start | 左对齐 |
flex-end | 右对齐 |
center | 居中对齐 |
space-around | 两端对齐,项目之间的间隔都相等。项目平分剩余空间 |
space-between | 先两边贴边,再平分剩余空间,每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍 |
3.2.3 flex-wrap 属性
flex-wrap 属性设置是否换行
默认情况下,项目都排在一条线(又称”轴线”)上,flex布局中默认是不换行的
属性 | 说明 |
---|---|
nowrap | 不换行 |
wrap | 换行 |
3.2.4 align-items 属性
设置侧轴上的子元素排列方式(单行)
.box {
align-items: flex-start | flex-end | center | baseline | stretch;
}
属性 | 说明 |
---|---|
flex-start | 交叉轴的起点对齐(从头部开始) |
flex-end | 交叉轴的终点对齐(从尾部开始) |
center | 交叉轴的中点对齐(居中对齐) |
baseline | 项目的第一行文字的基线对齐 |
stretch(默认值) | 如果项目未设置高度或设 auto ,将占满整个容器的高度 |
3.2.5 align-content 属性
设置侧轴上的子元素排列方式(多行),如果项目只有一根轴线,该属性不起作用。
.box {
align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}
属性 | 说明 |
---|---|
flex-start | 与交叉轴的起点对齐(从侧轴头部开始) |
flex-end | 与交叉轴的终点对齐(从侧轴尾部开始) |
center | 与交叉轴的中点对齐(在侧轴中间显示) |
space-between | 与交叉轴两端对齐,轴线之间的间隔平均分布(子项在侧轴先分布在两头,在平分剩余空间) |
space-around | 每根轴线两侧的间隔都相等,轴线之间的间隔比轴线与边框的间隔大一倍(子项在侧轴平分剩余空间) |
stretch(默认值) | 轴线占满整个交叉轴(设置子项元素高度平分父元素高度) |
3.2.6 align-content 和 align-items 的区别
-
align-items 适用于单行情况下, 只有上对齐、下对齐、居中和 拉伸
-
align-content适应于换行(多行)的情况下(单行情况下无效), 可以设置 上对齐、下对齐、居中、拉伸以及平均分配剩余空间等属性值。
-
总结就是单行找align-items 多行找 align-content
3.2.7 flex-flow 属性
flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap
.box {
flex-flow: <flex-direction> || <flex-wrap>;
}
四、项目属性
以下6个属性设置在项目上
属性 | 说明 |
---|---|
order | 定义项目的排列顺序 |
flex-grow | 定义项目的放大比例 |
flex-shrink | 定义项目的缩小比例 |
flex-basis | 定义再分配多余空间之前,项目占据的主轴空间 |
flex | 是 flex-grow,flex-shrink,flex-basis 的简写 |
align-self | 允许单个项目有与其他项目不一样的对齐方式,可覆盖 align-items 属性 |
4.1 order 属性
order 属性定义项目的排列顺序,数值越小,排列越靠前,默认值为 0
.item {
order: <integer>; /* 整数 */
}
4.2 flex-grow 属性
flex-grow 属性定义项目的放大比例,默认值为0,即如果存在剩余空间,也不放大
.item {
flex-grow: <number>; /* 默认 0 */
}
如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。
4.3 flex-shrink 属性
flex-shrink 属性定义了项目的缩小比例,默认值为1,即如果空间不足,该项目将缩小
.item {
flex-shrink: <number>; /* 默认 1 */
}
-
如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。
-
负值对该属性无效。
4.4 flex-basis 属性
flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。
.item {
flex-basis: <length> | auto; /* 默认 auto */
}
它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。
4.5 flex 属性
flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选
.item {
flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}
-
该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。
-
建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。
4.6 align-self 属性
align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
.item {
align-self: auto | flex-start | flex-end | center | baseline | stretch;
}
该属性可能取6个值,除了auto,其他都与align-items属性完全一致。