rem(root em)是一个相对单位,类似与em,em父元素字体大小
不同的是rem的基准是相对于html元素的字体大小
比如:根元素(html)设置font-size=12px,非根元素设置width=12px;非根元素设置width:10rem;则换成px表示就是120px
html {
font-size: 12px;
}
.box {
width: 10rem;
height: 10rem;
background-color: blue;
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5SMsx65p-1610612035455)(D:\桌面\临时文件\MK图片\image-20210114112847655.png)]
**优势:**父元素文字大小可能不一致,但是整个页面只有一个html,可以很好的来控制整个页面的大小
其他布局存在的问题
采用rem布局,可以让屏幕发生变化时,元素的高度和宽度以及文字的大小都能等比例缩放
媒体查询(media query)是css3的新语法
在使用rem
作为元素单位时,元素的尺寸会随着html中的font-size的变化而变化。
当屏幕大时,设置的font-size为较大值,元素就会变大;
当屏幕小时,设置的font-size为较小值,元素就会变小;
这时候就可以使用媒体查询来随时改变html
中font-size
的值,但其不是唯一的方式
mediatype
媒体类型and
、 not
、 only
关键字media feature
媒体特性,必须有小括号包含@media mediatype and|not|only (media feature){
css-Code
}
类型 | 说明 |
---|---|
all | 全部媒体类型 |
screen | 彩色屏幕最常用的介质类型,一般和屏幕大小表达式联合使用 |
handheld | 小屏幕和流量有限的手持设备(并不使用) |
提供给打印机的样式,最常用的介质类型,打印页面时获得适合阅读的效果。 | |
braille | 盲文触摸装置。 |
embossed | 分页盲文打印机。 |
projection | 投影,给投影机使用。 |
speech | 语音朗诵,用于屏幕阅读软件。 |
tty | 固定间距字符网格,例如功能机那样的 |
tv | 智能电视设备。 |
关键字将媒体查询类型或多个媒体类型特性连接到一起最为媒体查询的条件
属性 | 说明 |
---|---|
width | 视口宽度 |
height | 视口高度 |
device-width | 设备屏幕的宽度 |
device-height | 设备屏幕的高度 |
orientation | 检查设备处于横向还是纵向 |
aspect-ratio | 基于视口宽度和高度的宽高比 |
color | 每种颜色的位数 |
color-index | 设备的颜色索引表中的颜色数 |
resolution | 用来检测屏幕或打印机的分辨率 |
举个栗子
需求如下
按照描述,一步步往下写,使用max-width作为限定使用的属性结果如下:
body {
color: #fff;
background-color: #aaaaaa;
}
@media screen and (max-width: 540px) {
body {
color: #a00;
background-color: #fff;
}
}
@media screen and (max-width: 800px) {
body {
color: #000;
background-color: yellow;
}
}
很明显,这两个页面的样式竟然是一样的,屏幕小于540px的媒体查询并没有起到作用。那么问题出在哪里呢
在css中,权重相同的样式,在同时满足工作条件时,写在后面的样式会覆盖前面的值
修改后的内容如下:
body {
color: #fff;
background-color: #aaaaaa;
}
@media screen and (max-width: 800px) {
body {
color: #000;
background-color: yellow;
}
}
@media screen and (max-width: 540px) {
body {
color: #a00;
background-color: #fff;
}
}
**结论:**把限定更小的媒体查询样式放在代码的后面
css是一门非程序是语言,没有变量、函数、作用域等概念
less(leanerStyle Sheets)是一门css扩展语言,也成为css预处理器
作为css的一种形式的扩展,它并没有减少css的功能,而是在现有的css语法上,为css加入程序式语言的特性
它在CSS 的语法基础之上,引入了变量,Mixin(混入),运算以及函数等功能,大大简化了 CSS 的编写,并且降低了 CSS的维护成本,就像它的名称所说的那样,Less可以让我们用更少的代码做更多的事情。
less是一门css预处理语言,它扩展了css的动态特性
先创建.less文件,然后将其编译成最终使用的css文件,因为html中只能引入css文件,每次更新less文件后,需要重新编译成css文件
编写
@color:orange;
body {
background-color: @color;
}
.box {
width: 200px;
height: 200px;
background-color: @color;
}
编译
安装 vs code 插件 easy less
在 .less 文件中保存代码,就会自动生成同名的 css 文件
在 html 文件中引入 css 文件即可
变量是指没有固定的值,可以改变的。因为我们css中的而一些颜色和数值等经常是使用
@变量名:值
@count:30
.box{
width:200px;
height:200px;
background:red;
div{
width:100px;
height:100px;
background:black;
}
}
交集|伪类|伪元素选择器 ,利用&进行连接
a:hover{
color:red;
}
a{
&:hover{
color:red;
}
}
任何数字、颜色或者变量都可以参加运算。less提供了加减乘除运算符
@count:20px;
div{
width:@count/10;
height:@count/10;
}
/*生成的css*/
div{
width:2px;
height:2px;
}
在less文件中引入另一个less文件使用@import
格式:
@import '文件名';
@import 'common'
html
的字体大小,然后页面元素使用rem
做单位尺寸技术方案:
1.less+rem+媒体查询
2.flexible.js+rem
总结:
两种方案现在都存在。
方案2 更简单,现阶段大家无需了解里面的js代码。
1、设置视口
"viewport" content="width=device-width, user-scalable=no,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
2、引入初始化样式
"stylesheet" href="css/normalize.css">
3、设置公共less文件
@count: 15;
@media screen and (min-width: 320px) {
html {
font-size: 320px / @count;
}
}
@media screen and (min-width: 360px) {
html {
font-size: 360px / @count;
}
}
@media screen and (min-width: 375px) {
html {
font-size: 375px / @count;
}
}
@media screen and (min-width: 384px) {
html {
font-size: 384px / @count;
}
}
@media screen and (min-width: 400px) {
html {
font-size: 400px / @count;
}
}
@media screen and (min-width: 414px) {
html {
font-size: 414px / @count;
}
}
@media screen and (min-width: 424px) {
html {
font-size: 424px / @count;
}
}
@media screen and (min-width: 480px) {
html {
font-size: 480px / @count;
}
}
@media screen and (min-width: 540px) {
html {
font-size: 540px / @count;
}
}
@media screen and (min-width: 720px) {
html {
font-size: 720px / @count;
}
}
@media screen and (min-width: 750px) {
html {
font-size: 750px / @count;
}
}
html
font-size的大小 = 屏幕宽度/划分的份数