1、flex布局 各种属性及用法
容器的属性
(1)flex-direction 主轴的方向(即项目的排列方向)
● row(默认值):主轴为水平方向,起点在左端。
● row-reverse:主轴为水平方向,起点在右端。
● column:主轴为垂直方向,起点在上沿。
● column-reverse:主轴为垂直方向,起点在下沿。
(2)flex-wrap 如果一条轴线排不下,如何换行。
(1)nowrap(默认):不换行
(2)wrap:换行,第一行在上方
(3)wrap-reverse:换行,第一行在下方
(3) flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。
(4) justify-content属性定义了项目在主轴上的对齐方式。
● flex-start(默认值):左对齐
● flex-end:右对齐
● center: 居中
● space-between:两端对齐,项目之间的间隔都相等。
● space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
(5) align-items属性定义项目在交叉轴上如何对齐。
● flex-start:交叉轴的起点对齐。
● flex-end:交叉轴的终点对齐。
● center:交叉轴的中点对齐。
● baseline: 项目的第一行文字的基线对齐。
● stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度
(6) align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
● flex-start:与交叉轴的起点对齐。
● flex-end:与交叉轴的终点对齐。
● center:与交叉轴的中点对齐。
● space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
● space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
● stretch(默认值):轴线占满整个交叉轴。
项目属性
(1) order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。
(2) flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。
(3) flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。
负值对该属性无效。
(4) flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。
(5)flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。
该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。
(6)align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
2、字体 rpx\em\rem
(1)px单位
- px是css中常见的单位
- px:pixel,像素,屏幕上显示的最小单位,用于网页设计,直观方便。
(2) rpx单位
- rpx是小程序常用的单位
- rpx和px的换算:1px=2rpx
(3) em单位
- em单位大小CSS 3中新增的一种相对长度单位,首先它会找自身有没有font-size,没有的话找父元素的字体大小(font-size),一直往上寻找,直到找到为止
<!DOCTYPE html>
<html lang="en">
<body>
<div>
<p></p>
</div>
</body>
</html>
<style>
div{
font-size:12px;
}
p{
/* div的字体大小×长度=12px*10em=120px */
font-size:20px;
width:10em; //200px
height:10em;
}
</style>
<!DOCTYPE html>
<html lang="en">
<body>
<div>
<p></p>
</div>
</body>
</html>
<style>
div{
font-size:12px;
}
p{
/*p没有设置字体大小,找到的是div的字体大小 */
width:10em; //120px
height:10em;
}
</style>
- 无论是字体大小还是宽度高度用了em单位,那么其px大小等于往上找到的字体大小乘于自身的em大小。
- 比如html->div->p,p的大小如果div没有设置字体大小,那么就找html的字体大小,如果没有就获取html的默认字体大小。(默认字体根据浏览器的不同或有变化)
- 这样就实现了随着字体大小的变化,响应式地改变大小,适应屏幕大小
(4) rem单位
- rem是CSS 3中新增的一种相对长度单位。当使用rem单位时,`根节点< html>的字体大小(font-size) 决定了rem的尺寸。
- 与em单位相比,rem单位的优势在于,只通过修改< html>的文字大小,就可以改变整个页面中的元素大小,使用起来更加方便。
- 即使html没有设置字体大小,也不会获取父元素的字体大小,而是获取html的字体大小。
html {
font-size: 14px;
}
div {
font-size: 12px;
}
div > p {
width: 10rem; /* 结果为140px */
height: 10rem; /* 结果为140px */
}
(5) 小结
● 我们可以根据不同的需求分别使用不同的单位
● px是相对单位,像素级
● rpx是小程序用的比较多
● 说到响应式单位,一般指的rem和em
3、媒体查询 media queries
媒体查询即media queries,它可以针对不同的媒体类型定义不同的样式,从而实现响应式布局 ,也可以针对不同的分辨率设置不同的样式。当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面。
例如:
1024分辨率以上:PC端
1024 ~ 768 : pad pro
768 ~ 450 : pad mini , mobile 横屏
450分辨率以下: mobile 竖屏
常见的媒体类型:
● all 用于所有设备
● print 用于打印机和打印预览。
● screen 用于电脑屏幕,平板电脑,智能手机等。
● speech 应用于屏幕阅读器等发声设备。
在media queries中,使用max / min来表示大于等于小于以此作为逻辑判断。
● 最小宽度:min-width,当媒体类型大于或是等于指定的宽度时,大括号内的样式生效;
● 最大宽度:max-width,当媒体类型小于或是等于指定的宽度时,大括号内的样式生效。
逻辑运算符:
- not:用来排除某种设备。比如,排除打印设备 @media not print;
- only:用以指定某特定媒体设备。对于支持 Media Queries 的移动设备来说,如果存在 only 关键字,移动设备的 Web 浏览器会忽略 only关键字并直接根据后面的表达式应用样式文件。对于不支持 Media Queries 的设备但能够读取 Media Type 类型的 Web浏览器,遇到 only 关键字时会忽略这个样式文件。
- all:适用于所有的设备类型;
- and:媒体查询中来连接多种媒体特性,一个媒体查询中可以包含0或多个表达式,表达式可以是0或多个关键字,以及一种媒体类型。
直接写在css样式中:
@media all and (min-width:500px){ }
@media all and (min-width:500px) and (max-width:800px){ }
link的使用:
<link rel="stylesheet" href="./xxx.css" media="all and (min-width:600px)">