公告
Skip to content

常用布局 ​

Flex布局 ​

flex 容器属性 ​

1. flex-direction(子元素排列顺序) ​

flex-direction 属性规定灵活项目的排列方向(主轴方向):

  • row: 默认值,灵活的项目将水平显示。
  • row-reverse: 与 row 相同,但以相反的顺序。
  • column: 灵活的项目将垂直显示。
  • column-reverse: 与 column 相同,但以相反的顺序。

2. flex-wrap(换行) ​

用于设置伸缩项目在主轴上的换行方式:

  • nowrap: 默认值,灵活的项目不拆行或不拆列。
  • wrap: 在必要时拆行或拆列。
  • wrap-reverse: 在必要时拆行或拆列,但以相反的顺序。

3. flex-flow ​

flex-flow 属性是 flex-direction 属性和 flex-wrap 属性的简写形式,默认值为 row nowrap,用于简化代码。

4. justify-content(主轴对齐方式) ​

justify-content 用于设置弹性盒子元素在主轴(横轴)方向上的对齐方式:

值描述
flex-start默认值,项目位于容器的开头。
flex-end项目位于容器的结尾。
center项目位于容器的中心。
space-between项目位于各行之间留有空白的容器内。
space-around项目位于各行之前、之间、之后都留有空白。

5. align-items(侧轴对齐方式) ​

align-items 定义 flex 子项目在 flex 容器的侧轴(纵轴)方向上的对齐方式:

值描述
stretch默认值,元素被拉伸以适应容器。
center元素位于容器的中心。
flex-start元素位于容器的开头。
flex-end元素位于容器的结尾。
baseline元素位于容器的基线上。

6. align-content(多行文本 y 轴对齐方式) ​

align-content 用于设置多行子元素在容器侧轴上的对齐方式(多行时才有效):

值描述
stretch默认值,元素被拉伸以适应容器。
center元素位于容器的中心。
flex-start元素位于容器的开头。
flex-end元素位于容器的结尾。
space-between元素位于各行之间留有空白的容器内。
space-around元素位于各行之前、之间、之后留有空白。

说明:align-content 在侧轴上执行样式时,会把默认的间距合并。对于单行子元素,该属性不起作用。

flex 子元素属性 ​

1. align-self(单个元素侧轴对齐方式) ​

align-self 定义 flex 子项单独在侧轴(纵轴)方向上的对齐方式:

值描述
auto默认值,继承父容器的 align-items 属性。
stretch元素被拉伸以适应容器。
center元素位于容器的中心。
flex-start元素位于容器的开头。
flex-end元素位于容器的结尾。
baseline元素位于容器的基线上。

2. flex-grow(扩展比率) ​

flex-grow 用于设置或检索弹性盒子项目的扩展比率:

  • number: 规定项目将相对于其他灵活的项目进行扩展的量。默认值是 0。

3. flex-shrink(收缩比率) ​

flex-shrink 设置弹性盒的伸缩项目的收缩比率:

  • number: 规定项目将相对于其他灵活的项目进行收缩的量。默认值是 1,表示溢出时等比例缩小。

算法-公式:

  • 超出空间的像素数:1000 - (900 + 200) = -100px
  • 加权总和:=(第一个子元素的宽度) * (shrink) + (第二个子元素的宽度) * (shrink) + ...
  • A 收缩的像素数:(\frac{(Awidth \times shrink)}{加权综合} \times 超出空间)

4. flex-basis(伸缩基准值) ​

flex-basis 设置弹性盒伸缩基准值(指定 flex-item 在主轴上的初始大小):

  • number: 规定灵活项目的初始长度。
  • auto: 默认值,长度等于灵活项目的长度。

5. order(出现顺序) ​

order 属性设置或检索弹性盒模型对象的子元素出现的顺序:

  • number: 值越小排列越靠前,值越大顺序越靠后。

6. flex(属性简写) ​

  • flex 属性用于设置弹性盒模型对象的子元素如何分配父元素的空间。
  • flex 属性是 flex-grow、flex-shrink 和 flex-basis 属性的简写属性。
值描述
auto1 1 auto
none0 0 auto
11 1 0%

Grid布局 ​

text
display: grid;

display: inline-grid;

grid-template-columns: 100px 1fr 1fr;                // fr 是fraction 的缩写,意为"片段",可以与绝对长度的单位结合使用
grid-template-columns: 1fr 1fr 1fr;
grid-template-columns: repeat(3, 1fr);               // repeat()接受两个参数,第一个参数是重复的次数,第二个参数是要重复的值。
grid-template-columns: 1fr 1fr minmax(100px, 1fr);   // minmax()函数产生一个长度范围,表示长度就在这个范围之中。它接受两个参数,分别为最小值和最大值。
grid-template-columns: repeat(auto-fill, 100px);     // 空白匿名网格
grid-template-columns: repeat(auto-fit, 100px);      // 空白匿名网格折叠合并
grid-template-columns: fit-content(100px) fit-content(100px) 40px auto;  // 让尺寸适应于内容,但不超过设定的尺寸,只支持数值和百分比值

grid-template-rows  //  使用方法与列相同

row-gap: 20px;       // 行间距
column-gap: 30px;    // 列间距
gap: 20px;           // 行列间距

justify-items 指定单元格内容的水平对齐方式,属性值有:
stretch:【默认值】拉伸,占满单元格的整个宽度。
start:对齐单元格的起始边缘。
end:对齐单元格的结束边缘。
center:单元格内部居中。

align-items 指定单元格内容的垂直对齐方式,属性值有:
normal:【默认值】会根据使用场景的不同表现为stretch或者start。
stretch:拉伸,占满单元格的整个宽度。
start:对齐单元格的起始边缘。
end:对齐单元格的结束边缘。
center:单元格内部居中。
baseline:基线对齐(align-items属性特有属性值)

place-items 是align-items属性和justify-items属性的合并简写形式:
place-items: start end;

justify-self 跟justify-items属性的用法完全一致,但只作用于单个项目。

align-self 跟align-items属性的用法完全一致,也是只作用于单个项目。

place-self 是align-self属性和justify-self属性的合并简写形式。

常用属性 ​

通用属性 ​

属性描述
initial默认值
unset未设置(用于样式重置)
revert回归到浏览器的默认样式

边框的属性 ​

1. border-width ​

属性值描述
thin定义细的边框。
medium默认。定义中等的边框。
thick定义粗的边框。
length允许您自定义边框的宽度。

2. border-color ​

属性值描述
color_name颜色名称
hex_number十六进制颜色
rgb_numberRGB 颜色
transparent默认值,边框颜色为透明

3. border-style ​

属性值描述
none定义无边框。
hidden与 "none" 相同,但用于表格时解决边框冲突。
dotted定义点状边框。
dashed定义虚线。
solid定义实线。
double定义双线。
groove定义 3D 凹槽边框。
ridge定义 3D 垄状边框。
inset定义 3D inset 边框。
outset定义 3D outset 边框。

4. 边框简写 ​

css
border: 5px solid #ff0000; /* 边框宽度 边框风格 边框颜色 */

5. 单方向边框设置 ​

css
border-bottom: 边框宽度 边框风格 边框颜色; /* 底边框 */
border-left: 边框宽度 边框风格 边框颜色;   /* 左边框 */
border-right: 边框宽度 边框风格 边框颜色;  /* 右边框 */
border-top: 边框宽度 边框风格 边框颜色;    /* 上边框 */

6. 边框属性设置示例 ​

属性描述
border-width/color/styleA B C D; 上右下左
border-width/color/styleA B C; 上左右下
border-width/color/styleA B; 上下左右
border-width/color/styleA; 上下左右

背景属性 ​

1. background-color ​

属性值描述
colorname规定颜色名称为背景
hex规定十六进制的背景颜色
rgb规定 RGB 的背景颜色
transparent默认,背景颜色为透明

2. background-image ​

属性值描述
url ()指向图像路径
none默认值,不显示背景图像

背景图片的显示原则 ​

  1. 容器尺寸等于图片尺寸,背景图片正好显示在容器中。
  2. 容器尺寸大于图片尺寸,背景图片将默认平铺,直至铺满元素。
  3. 容器尺寸小于图片尺寸,只显示元素范围以内的背景图。

3. background-repeat ​

属性值描述
no-repeat背景图像仅显示一次,不平铺
repeat默认。背景图像将在垂直和水平方向重复
repeat-x背景图像将在水平方向重复
repeat-y背景图像将在垂直方向重复

4. background-position ​

属性值描述
xpos/%/left right center水平位置
ypos/%/top bottom center垂直位置

5. background-attachment ​

属性值描述
scroll默认值。背景图像会随着页面的滚动而移动
fixed背景图像不会随着页面的滚动而移动

6. background ​

属性值描述
background: color image repeat position attachment;简写属性,在一个声明中设置所有的背景属性

文本的属性 ​

1. font-size ​

属性值描述
数值型必须给属性值加单位,0 时除外
绝对大小关键字xx-small = 9px, x-small = 11px, ...

2. color ​

属性值描述
colorname颜色名称
hex十六进制颜色
rgbRGB 颜色

3. font-family ​

描述
设置多个字体名称作为后备机制
字体名称超过一个字时,必须用引号
多个字体系列用逗号分隔

4. font-weight ​

属性值描述
bolder更粗的
bold加粗
normal常规
lighter更细
100—900100 对应最轻的字体变形

5. font-style ​

属性值描述
italic倾斜
oblique更倾斜
normal取消倾斜,常规显示

6. line-height ​

属性值描述
normal默认。设置合理的行间距
number设置数字,此数字会与当前的字体尺寸相乘
length设置固定的行间距

7. text-align ​

属性值描述
left把文本排列到左边。
right把文本排列到右边。
center把文本排列到中间。
justify实现两端对齐文本效果。

8. text-decoration ​

属性值描述
none没有修饰
underline添加下划线
overline添加上划线
line-through添加删除线

9. text-indent ​

属性值描述
length定义固定的缩进。
%定义基于元素宽度的百分比的缩进。

10. text-transform ​

属性值描述
none默认。标准文本
capitalize每个单词以大写字母开头
uppercase仅有大写字母
lowercase仅有小写字母

11. letter-spacing ​

属性值描述
normal默认。字符间没有额外的空间
length定义字符间的固定空间(允许使用负值)。

12. word-spacing ​

属性值描述
normal默认。定义单词间的标准空间
length定义单词间的固定空间。

文本溢出 ​

overflow ​

属性值描述
visible默认值,内容不会被修剪
hidden内容会被修剪且不可见
scroll内容会被修剪,显示滚动条
auto内容被修剪时显示滚动条
inherit从父元素继承 overflow 属性的值

white-space ​

属性值描述
normal默认值,多余空白会被忽略
pre空白会被保留(类似 pre 标签)
pre-wrap保留空白符序列,正常换行
pre-line合并空白符序列,保留换行符
nowrap文本不会换行,直到遇到
标签为止

text-overflow ​

属性值描述
clip不显示省略号(...),简单裁切
ellipsis溢出时显示省略标记

示例代码 ​

css
/* 设置单段文字显示省略号 */
width: 100px; /* 强制容器宽度 */
white-space: nowrap; /* 文字在一行显示 */
overflow: hidden; /* 设置文字溢出 */
text-overflow: ellipsis; /* 溢出文字显示省略号 */

/* 多行文本省略 */
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;

列表属性 ​

list-style-type ​

属性值描述
none无标记
disc默认。标记是实心圆
circle标记是空心圆
square标记是实心方块
decimal标记是数字
decimal-leading-zero0 开头的数字标记 (01, 02, 03, 等)
lower-roman小写罗马数字 (i, ii, iii, iv, v, 等)
upper-roman大写罗马数字 (I, II, III, IV, V, 等)
lower-alpha小写英文字母 (a, b, c, d, e, 等)
upper-alpha大写英文字母 (A, B, C, D, E, 等)
lower-greek小写希腊字母 (alpha, beta, gamma, 等)
lower-latin小写拉丁字母 (a, b, c, d, e, 等)
upper-latin大写拉丁字母 (A, B, C, D, E, 等)

list-style-position ​

属性值描述
inside列表项目标记放置在文本以内
outside默认值。标记位于文本的左侧

list-style-image ​

属性值描述
URL图像的路径
none默认。无图形显示

list-style ​

示例描述
list-style: circle inside;设置列表项标记为圆形并放置在文本内
list-style: url () inside;使用图片作为列表符号并放置在文本内
list-style: none;去掉列表符号

浮动 ​

float ​

属性值描述
left元素向左浮动
right元素向右浮动
none默认值。元素不浮动

分类 ​

类型描述
块状元素div, p, h3, ol, li, ul, dl, dt, dd
行内元素em, i, b, strong, a, sup, sub, span, del

CSS 选择器 ​

常见选择器 ​

一、CSS + CSS3 选择器 ​

选择器示例描述
类选择器.name {}选择类名为 name 的元素
ID 选择器#id {}选择 ID 为 id 的元素
元素选择器div {}选择所有 div 元素
通配符选择器* {}选择所有元素
后代选择器div p {}选择所有 div 内的 p 元素
子选择器div > p {}选择 div 下的直接子元素 p
兄弟选择器div + p {}选择紧接在 div 后的 p 元素
交集选择器div, p, .name {}选择共享样式的元素

二、属性选择器 ​

选择器示例描述
属性选择器a[target=_blank]选择所有 target 属性为 _blank 的 a 标签
属性包含选择器div[title~=name]选择 title 属性包含 name 的 div 元素
属性开头选择器img[src^='https']选择 src 属性以 https 开头的 img 标签
属性结尾选择器img[src$='.png']选择 src 属性以 .png 结尾的 img 标签
定义属性选择器*[target] { color: red; }所有带有 target 属性的元素变为红色
span[class='test']匹配 class 为 test 的 span 标签
span[class*='test']匹配 class 中包含 test 的 span 标签
span[class]匹配所有带有 class 属性的 span 标签
[class='all']匹配所有 class 为 all 的元素
[class*='as']匹配所有 class 中带有 as 字符串的元素

三、伪类选择器 ​

伪类选择器示例描述
焦点伪类:focus选择获得焦点的元素
悬浮伪类:hover选择鼠标悬停的元素
前置伪类p::after在 p 元素后面追加内容
后置伪类p::before在 p 元素前面追加内容
光棍伪类p:empty选择没有子元素的 p 标签
取反伪类div:not(p)选择 div 下所有不是 p 标签的元素
首个选择器div p:first-of-type选择 div 下的第一个 p 标签
末尾选择器ul li:last-child选择 ul 下最后一个 li
正序筛选伪类:nth-child(2n)选择正序的第 2 的倍数元素
倒序筛选伪类:nth-last-child(2)选择倒序的第 2 个元素

注意点 ​

  • nth-child(2):找位置为 2 的 p 元素,如果位置 2 不是 p 元素则不生效。
  • nth-of-type(2):找排在第二的 p 元素,即使前面有其他元素。

伪对象选择符 ​

选择符描述
::after在被选元素的内容后面插入内容
::before在元素内容之前添加新内容
::first-letter定义对象内第一个字符的样式
::first-line定义对象内第一行的样式
::selection定义用户选择内容的样式(背景颜色)
::-webkit-scrollbar去除滚动条

表单 ​

表单标签 ​

标签描述
<form>创建 HTML 表单,用于向服务器传输数据
name 属性规定表单的名称
action 属性提交表单时,向何处发送表单数据
method 属性规定如何发送表单数据(POST 或 GET 方法)

表单控件: input ​

控件类型示例描述
文本输入框<input type="text" />规定 input 元素的类型
密码框<input type="password" />输入密码
提交按钮<input type="submit" value="提交" />提交表单
重置按钮<input type="reset" value="重置" />重置表单
空按钮<input type="button" value="按钮" />普通按钮

表单控件(元素):input/非 input ​

控件类型示例描述
fieldset<fieldset>表单字段集,用于分组
legend<legend>字段集标题,分组标题
radio<input type="radio" name="ral" />单选框
checkbox<input type="checkbox" name="like" />复选框
hidden<input type="hidden" name="country" value="Norway" />隐藏输入字段
file<input type="file" name="file" />文件上传
label<label for="czm">姓名:</label>提示信息标签
select<select name="name" id="czm">下拉列表
option<option value="1">选项1</option>下拉列表中的选项
optgroup<optgroup label="分组">选项组
textarea<textarea rows="10" cols="30"></textarea>多行文本框
image<input type="image" src="submit.gif" alt="提交" />图像提交按钮
button<button type="button">按钮</button>按钮

HTML5 新增表单属性 ​

属性描述
placeholder文本框的输入提示
required检测输入框是否为空
autofocus页面加载时自动获得焦点
novalidate提交表单时不进行验证
multiple输入域中可选择多个值
autocomplete启用或禁用自动完成功能
min/max/step限制数字或日期的输入
form规定输入域所属的表单
pattern验证输入域的模式
list与 datalist 元素配合使用

HTML5 多媒体标签 ​

标签示例描述
<video><video src="movie.ogg">您的浏览器不支持video标签</video>定义视频
<audio><audio src="someaudio.wav">您的浏览器不支持audio标签</audio>定义音频
<source><source src="horse.ogg" type="audio/ogg">定义媒介资源

图像热点链接 map ​

使用方法 ​

  1. 插入图片:

    html
    <img src="../imgs/1.jpg" alt="" usemap="#map1" />
  2. 定义 map 标签:

    html
    <map name="map1" id="map1">
        <area shape="rect" coords="500,481,670,662" href="./test.html" alt="" />
        <area shape="circ" coords="774,582,86" href="./test.html" alt="" />
    </map>

area 标签属性 ​

属性描述
shape定义区域形状(rect、circ、poly)
coords定义可点击区域的坐标
alt定义此区域的替换文本
target设置超链接的打开方式

区域形状示例 ​

  • 矩形:

    html
    <area shape="rect" coords="x1,y1,x2,y2" />
  • 圆形:

    html
    <area shape="circle" coords="x,y,radius" />
  • 多边形:

    html
    <area shape="poly" coords="x1,y1,x2,y2,x3,y3" />

BFC 元素 ​

什么是 BFC ​

BFC(Block Formatting Context)是 W3C CSS2.1 规范中的一个概念。它是页面中的一块渲染区域,有一套渲染规则,决定了其子元素的定位及与其他元素的关系和相互作用。

BFC 参与的格式化上下文 ​

  • Block-level box 参与 Block Formatting Context
  • Inline-level box 参与 Inline Formatting Context
  • Grid-level box 参与 Grid Formatting Context
  • Flex-level box 参与 Flex Formatting Context

BFC 的特点 ​

text
// BFC 特性
--> BFC
    块级格式化上下文,内部子元素按独特规则排列:
        - 相邻元素 margin 会重叠,无论方向
        - 计算宽高时,float 元素也会被计算,不会再高度塌陷

// 触发条件
--> 触发条件:
    - 根元素,即 HTML 标签
    - overflow 不为 visible
    - float 不为 none
    - display 为:inline-block, flex, inline-flex, grid, inline-grid, inline-table, table-cell, table-caption
    - position 为 absolute/fixed

// 层叠顺序
--> 层叠顺序:
    z-index 为负 < background < border < 块级元素 < 浮动元素 < 内联元素 < 没有设置 z-index 的定位元素 < z-index 为正

// 选择器优先级
--> 选择器优先级:
    !important > 行内 > id > 类 & 伪类(:) > 元素 & 伪元素(::) > 通配符 *

BFC 布局规则 ​

  1. 内部的 Box 在垂直方向一个接一个地放置。
  2. Box 垂直方向的距离由 margin 决定。属于同一个 BFC 的两个相邻 Box 的 margin 会重叠(按照最大 margin 值设置)。
  3. 每个元素的 margin box 的左边,与包含块 border box 的左边相接触。
  4. BFC 的区域不会与 float box 重叠。
  5. BFC 是页面上的一个隔离的独立容器,容器里面的子元素不会影响外面的元素。
  6. 计算 BFC 的高度时,浮动元素也参与计算。

触发 BFC 的元素或属性 ​

元素或属性
根元素(<html>)
浮动元素(float 不是 none)
overflow 值不为 visible 的块元素
定位元素(position 为 absolute 或 fixed)
行内块元素(display 为 inline-block)
表格单元格(display 为 table-cell)
表格标题(display 为 table-caption)
表格其他元素(display 为 table、table-row、table-row-group、table-header-group、table-footer-group 或 inline-table)
display 值为 flow-root、flex 的元素
contain 值为 layout、content 或 paint 的元素
弹性元素(display 为 flex 或 inline-flex 的直接子元素)
网格元素(display 为 grid 或 inline-grid 的直接子元素)
多列容器(column-count 或 column-width 不为 auto,包括 column-count 为 1)
column-span 为 all 的元素始终会创建一个新的 BFC

CSS3 属性 ​

盒子圆角 ​

css
border-radius: val; /* 四个角的圆角是一样的 */
border-radius: val1 val2; /* 左上角/右下角  右上角/左下角 */
border-radius: val1 val2 val3; /* 左上角 右上角/左下角 右下角 */
border-radius: val1 val2 val3 val4; /* 左上 右上 右下 左下 */
  • 取消圆角效果:border-radius: 0;

盒子阴影 ​

css
box-shadow: h-shadow v-shadow blur spread color inset;
  • 属性值:
    • h-shadow: 必需的,水平阴影位置,允许负值
    • v-shadow: 必需的,垂直阴影位置,允许负值
    • blur: 可选,模糊距离
    • spread: 可选,阴影大小
    • color: 可选,阴影颜色
    • inset: 可选,从外层阴影变为内侧阴影

transform2D 功能函数属性 ​

  1. translate (x, y):元素从当前位置移动。

    • translateX(n):沿 X 轴移动元素。
    • translateY(n):沿 Y 轴移动元素。
  2. rotate (n deg):定义 2D 旋转,参数中规定角度。

  3. scale (number, number):指定对象的 2D 缩放。

  4. skew (angle, angle):指定对象的斜切扭曲。

  5. matrix (n, n, n, n, n, n):组合所有 2D 转换方法。

变形原点 ​

css
transform-origin: x-axis y-axis z-axis;
  • 属性值:
    • x: left center right / length / %
    • y: top center bottom / length / %
    • z: length

过渡属性 transition ​

  1. transition-property:规定设置过渡效果的 CSS 属性名称。
  2. transition-duration:规定完成过渡效果需要的时间。
  3. transition-timing-function:规定过渡效果的速度曲线。
  4. transition-delay:定义在过渡效果开始前的等待时间。
  5. 简写属性:
    css
    transition: property duration timing-function delay;

线性渐变 ​

css
background-image: linear-gradient(direction, color-stop1, color-stop2, ...);
  • 说明:
    • direction:定义渐变的角度方向。
    • color-stop:指定渐变的起止颜色。

CSS3 动画 ​

关键帧的定义 ​

css
@keyframes animation-name {
    keyframes-selector { css-styles; }
}
  • 示例:
css
@keyframes mymove {
    from { /* 初始状态属性 */ }
    to { /* 结束状态属性 */ }
}

animation 属性 ​

  1. animation-name:动画名称。
  2. animation-duration:动画持续时间。
  3. animation-timing-function:动画过渡类型。
  4. animation-delay:动画延迟时间。
  5. animation-iteration-count:动画循环次数。
  6. animation-direction:动画是否反向运动。
  7. animation-fill-mode:动画时间之外的状态。
  8. animation-play-state:动画状态。

3D 属性 ​

  • transform-style:指定变形元素在三维空间中呈现。
  • perspective:定义 3D 元素距视图的距离。

回流和重绘 ​

回流与重绘的概念 ​

  • 重绘:当 DOM 元素的样式属性(如颜色、背景)发生改变时,浏览器重新绘制元素的过程。重绘不影响元素的几何属性和布局,性能开销较小。

  • 回流:也称为重排,指当 DOM 元素的几何属性(如位置、大小)发生改变时,浏览器重新计算并更新元素的几何属性,并重新构建页面布局树的过程。回流会导致其他元素的几何属性和布局发生变化,性能开销较大。

回流一定会导致重绘,但重绘不一定会导致回流。

导致回流的操作 ​

操作类型示例属性
盒模型属性width、height、padding、margin、border 等
定位属性position、top、left、bottom、right 等
布局属性display、float、clear、flex 等
字体属性font-size、line-height、text-align 等
背景属性background、background-color、background-image 等
可见性属性visibility、opacity 等
浏览器窗口大小变化修改浏览器窗口大小
页面初始加载页面加载时
渲染树变化添加或删除元素
获取布局属性offsetWidth、offsetHeight 等

导致重绘的操作 ​

操作类型示例属性
颜色属性color、background-color、border-color 等
文字属性font-weight、font-style、text-decoration 等
文本属性text-align、text-transform、line-height 等
背景属性background-image、background-position、background-size 等
盒子模型属性box-shadow、outline-color、outline-style 等
渐变属性linear-gradient、radial-gradient 等
变形属性transform、transform-origin 等
过渡属性transition、transition-property、transition-duration 等

媒体查询 ​

基于 CSS 的媒体查询 ​

媒体查询可以根据设备显示器的特性(如视口宽度、屏幕比例、设备方向)为其设定 CSS 样式。

语法 ​

css
@media mediatype and|not|only (media feature) {
    CSS-Code;
}

媒体设备类型 ​

媒体类型描述
all用于所有设备(默认值)
print用于打印机和打印预览
screen用于电脑屏幕、平板电脑、智能手机等
speech应用于屏幕阅读器等发声设备
tv用于电视设备

媒体属性 ​

媒体属性描述
max-height定义页面最大可见区域高度
max-width定义页面最大可见区域宽度
min-height定义页面最小可见区域高度
min-width定义页面最小可见区域宽度
width定义页面可见区域宽度
height定义页面可见区域高度
orientation定义页面横屏或竖屏(landscape/portrait)
max-device-height定义设备屏幕可见的最大高度
max-device-width定义设备屏幕可见的最大宽度
min-device-width定义设备屏幕可见的最小宽度
min-device-height定义设备屏幕可见的最小高度
device-height定义设备屏幕可见高度
device-width定义设备屏幕可见宽度

操作符 ​

  1. and:将多个媒体属性和媒体类型组合成一条媒体查询。

    css
    @media all and (min-width: 700px) and (orientation: landscape) { ... }
  2. 逗号:媒体查询中使用逗号分隔,效果等同于 or 逻辑操作符。

    css
    @media all and (min-width: 700px), handheld and (orientation: landscape) { ... }
  3. not:对一条媒体查询的结果进行取反。

    css
    @media not screen and (color), print and (color) { ... }
  4. only:用于排除不支持 CSS3 媒体查询的浏览器。

    css
    @media only screen and (min-width: 700px) { ... }

CSS2 与 CSS3 的媒体查询区别 ​

  • CSS2 媒体查询只用于 <style> 和 <link> 标签中,以 media 属性存在。
  • CSS3 新增了媒体属性和使用场景。

基于 JS 的媒体查询 ​

使用 window.matchMedia(mediaQueryString) 返回一个新的 MediaQueryList 对象,表示指定的媒体查询字符串解析后的结果。

示例代码 ​

javascript
function myFunction(x) {
    if (x.matches) { // 媒体查询
        document.body.style.backgroundColor = "yellow";
    } else {
        document.body.style.backgroundColor = "pink";
    }
}

var x = window.matchMedia("(max-width: 700px)");
myFunction(x); // 执行时调用的监听函数
x.addListener(myFunction); // 状态改变时添加监听器

移动端布局 ​

视口(Viewport) ​

许多智能手机使用一个比实际屏幕尺寸大很多的虚拟可视区域(980px),以便在智能手机端阅读时不会变形。为了让智能手机能根据媒体查询匹配对应样式,特意添加了一个 meta 标签。

语法 ​

html
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">

属性值 ​

  • width:可视区域的宽度,值可为数字或关键词 device-width;
  • height:可视区域的高度,值可为数字或关键词 device-height;
  • initial-scale:页面首次显示时的缩放级别(0-10.0);
  • minimum-scale:设定最小缩小比例(0-10.0);
  • maximum-scale:设定最大放大比例(0-10.0);
  • user-scalable:设定用户是否可以缩放(yes/no)。

vh、vw 相关 ​

  • 1vw:等于 1/100 的视口宽度(Viewport Width)
  • 1vh:等于 1/100 的视口高度(Viewport Height)
  • vmin:当前 vw 和 vh 中较小的值
  • vmax:vw 和 vh 中较大的值
  • svh:地址栏 UI 尚未缩小尺寸时的视口高度
  • lvh:地址栏 UI 缩小尺寸后的视口高度
  • dvh:根据地址栏 UI 是否缩小而使用的单位

移动端适配 ​

rem 基本转换 ​

以 750px 的屏幕宽度,预计 100px(根字体大小)= 1rem 来计算

移动端适配示例 ​

  1. 媒体查询 + rem

    css
    html { font-size: 100px; }
    @media screen and (min-width: 321px) and (max-width: 375px) { 
        html { font-size: 45px; } 
    }
    @media screen and (min-width: 376px) and (max-width: 414px) { 
        html { font-size: 50px; } 
    }
    @media screen and (min-width: 415px) and (max-width: 639px) { 
        html { font-size: 55px; } 
    }
    @media screen and (min-width: 640px) and (max-width: 719px) { 
        html { font-size: 60px; } 
    }
  2. 弹性布局

  3. flexible. js 插件

    • 流程:
      1. 引入 flexible.js 插件
      2. 去掉 HTML 里面默认的 meta 标签:
      html
      <meta name="viewport" content="width=device-width, initial-scale=1.0">