CSS杂记
链接HTML文件与CSS样式表
- 在
<head>元素里使用<style>元素嵌入样式表 - 使用HTML元素的style属性设置样式表
- 将样式表放在外部文件,然后使用
@import指令导入HTML文件 - 将样式表放在外部文件,然后使用
<link>元素链接至HTML文件
@import和<link>有什么区别?
首先, 是 HTML 提供的标签,属于 HTML 语义结构的一部分,能够并行加载 CSS 文件,加载效率更高,浏览器在解析 HTML 时遇到 标签就会立即开始加载对应的样式文件,有利于页面快速渲染,因此推荐在生产环境中优先使用。而 @import 是 CSS 提供的语法规则,通常用于在一个 CSS 文件中导入另一个 CSS 文件,属于 CSS 级别的语法,加载具有延迟性——只有在外部样式表被解析时才会继续解析 @import 的文件,可能会导致样式闪烁(FOUC)或阻塞渲染,影响性能。此外,旧版本的浏览器(如 IE5)对 @import 的兼容性较差,而 的兼容性更好也更稳定。从可维护性角度看,@import 常用于将 CSS 文件模块化,结构清晰,但不适合在 HTML 文件中使用。因此在实际开发中,如果是在 HTML 中引入样式,推荐使用 ;如果是在 CSS 中组织样式模块,可以使用 @import,但在现代工程化开发中,推荐使用 CSS 预处理器(如 Sass、Less)或模块化方案(如 PostCSS、Vite 等)统一管理样式依赖,更灵活高效。
选择器类型
| 类型 | 选择器 | 说明 | 示例 |
|---|---|---|---|
| 万用选择器 | * |
匹配所有元素 | * |
| 元素选择器 | h1 |
匹配指定元素 | p |
| 子选择器 | > |
匹配指定元素的子元素 | div > p |
| 后代选择器 | 空格 | 匹配指定元素的后代元素 | div p |
| 相邻兄弟选择器 | + |
匹配指定元素后面的相邻兄弟元素 | div + p |
| 通用兄弟选择器 | ~ |
匹配指定元素的所有兄弟元素 | div ~ p |
| 类选择器 | . |
匹配指定类名的元素 | .class |
| ID选择器 | # |
匹配指定 ID 的元素 | #id |
| 属性选择器 | [] |
匹配指定属性的元素 | [attr] |
| 伪类选择器 | : |
匹配指定状态的元素 | :hover |
| 伪元素选择器 | :: |
匹配指定元素的特定部分 | ::before |
- 详说属性选择器
[attr]:匹配具有指定属性的元素[attr=value]:匹配属性值完全等于指定值的元素[attr~=value]:匹配属性值中包含指定词汇的元素或以空格分隔[attr|=value]:匹配属性值以指定值开头的元素或以连字符分隔[attr^=value]:匹配属性值以指定值开头的元素[attr$=value]:匹配属性值以指定值结尾的元素[attr*=value]:匹配属性值中包含指定值的元素
- 详说伪类选择器
:link:匹配未访问的链接:visited:匹配已访问的链接:hover:匹配鼠标悬停的元素:active:匹配被激活的元素:focus:匹配获得焦点的元素:first-child:匹配父元素的第一个子元素:last-child:匹配父元素的最后一个子元素:nth-child(n):匹配父元素的第 n 个子元素:nth-last-child(n):匹配父元素的倒数第 n 个子元素:nth-of-type(n):匹配父元素的第 n 个指定类型的子元素:nth-last-of-type(n):匹配父元素的倒数第 n 个指定类型的子元素:first-of-type:匹配父元素的第一个指定类型的子元素:last-of-type:匹配父元素的最后一个指定类型的子元素:only-child:匹配父元素的唯一子元素:only-of-type:匹配父元素的唯一指定类型的子元素:empty:匹配没有子元素的元素:not(selector):匹配不符合指定选择器的元素:enabled:匹配可用的表单元素:disabled:匹配禁用的表单元素:checked:匹配被选中的表单元素:target:匹配当前活动的目标元素:lang(language):匹配指定语言的
- 详说伪元素选择器
::before:在元素内容之前插入内容::after:在元素内容之后插入内容::first-letter:选择元素的第一个字母::first-line:选择元素的第一行::selection:选择被用户选取的部分伪元素选择器是 CSS 中用于创建和样式化某些“虚拟”元素的一种语法,它不会出现在 DOM 中,但能通过样式实现特定的视觉效果。
选择器优先级
由选择器的“特异性值”决定
- 内联样式(a):如
<div style="color: red;">,它的优先级最高,特异性是 (1,0,0,0)。 - ID选择器(b):如
#app,特异性是 (0,1,0,0),次于内联样式。 - 类选择器、伪类、属性选择器(c):如
.btn、:hover、[type="text"],特异性是 (0,0,1,0)。 - 元素选择器和伪元素(d):如
div、h1、::before,特异性是 (0,0,0,1)。 - 如果特异性相同,则后写的规则覆盖前写的(就近原则)。
- 当然还有一个特殊情况是 !important,它会将样式强制提升为最高优先级,但它不是特异性的一部分,优先级体系之外,一般只在必要场景下使用(如第三方样式覆盖)。
颜色、字体、文本与列表属性
颜色属性
color:前景颜色,相对于背景颜色而言,用于设置文本颜色- 颜色名称:如
red、blue、green - rgb 值:如
rgb(255, 0, 0) - 十六进制值:如
#ff0000 - rgba 值:如
rgba(255, 0, 0, 0.5) - hsl 值:如
hsl(0, 100%, 50%),hsl 表示色调、饱和度、亮度 - hsla 值:如
hsla(0, 100%, 50%, 0.5)
- 颜色名称:如
background-color:背景颜色,用于设置元素的背景颜色,默认值是transparentopacity:透明度,用于设置元素的透明度,取值范围是 0~1,0 表示完全透明,1 表示完全不透明
字体属性
font-family:字体系列,用于设置元素的字体系列,如font-family: Arial, sans-serif;font-size:字体大小,用于设置元素的字体大小,如font-size: 16px;- 长度值:如
px、em、rem - 绝对值:如
xx-small、x-small、small、medium、large、x-large、xx-large - 相对值:如
smaller、larger - 百分比值:如
100%
- 长度值:如
font-weight:字体粗细,用于设置元素的字体粗细,如font-weight: bold;- 数值:如
100、200、300、400、500、600、700、800、900 - 关键字:如
normal、bold、bolder、lighter
- 数值:如
font-varient:字体变体,用于设置元素的字体变体,如font-varient: small-caps;normal:正常字体small-caps:小型大写字体
line-height:行高,用于设置元素的行高,如line-height: 1.5;- 数值:如
1.5、2 - 百分比值:如
150%、200% - 长度值:如
px、em normal:默认行高
- 数值:如
类型 单位 含义/全称 换算关系 参考对象 绝对单位 px像素(Pixel) 屏幕逻辑像素 屏幕 pt点(Point) 1pt = 1/72 inch 印刷单位 pc派卡(Pica) 1pc = 12pt = 1/6 inch 印刷单位 in英寸(Inch) 1in = 96px = 2.54cm 实体长度 cm厘米(Centimeter) 1cm ≈ 37.8px 实体长度 mm毫米(Millimeter) 1mm = 1/10 cm 实体长度 相对单位 %百分比 相对于父元素的对应属性 布局、宽高、边距等 em相对于当前元素的字体大小 所使用字体的大写英文字母M的宽度 字体大小、内边距、margin 等 rem根元素字体大小(root em) 根元素 <html>的font-size响应式字体/布局推荐用法 vw视口宽度的百分比 1vw = 1% 视口宽度 响应式横向布局,适配各种屏幕 vh视口高度的百分比 1vh = 1% 视口高度 响应式全屏布局 vmin较小的视口边(vw或vh) min(vw, vh)保证元素在所有设备上适配 vmax较大的视口边(vw或vh) max(vw, vh)用于控制最大比例布局 ch“0”字符的宽度 当前字体中数字“0”的宽度 表单输入宽度、等宽排版 ex“x”字符的高度 当前字体中小写“x”的高度 罕见用法,依赖字体 frFraction(分数单位) Grid 剩余空间的分配单位 Grid 布局下分配空间,响应式布局利器
文本属性
text-align:文本对齐方式,用于设置元素内文本的对齐方式,如text-align: center;left:左对齐right:右对齐center:居中对齐justify:两端对齐
text-indent:文本缩进,用于设置元素内文本的首行缩进,如text-indent: 2em;text-decoration:文本装饰,用于设置元素内文本的装饰效果,如text-decoration: underline wavy red;none:无装饰underline:下划线overline:上划线line-through:删除线text-decoration-color:装饰线颜色text-decoration-style:装饰线样式, 如dotted、dashed、solid、double、wavy
lettter-spacing:字母间距,用于设置元素内文本的字母间距,如letter-spacing: 2px;word-spacing:单词间距,用于设置元素内文本的单词间距,如word-spacing: 2px;text-transform:文本转换,用于设置元素内文本的大小写转换,如text-transform: uppercase;none:无转换uppercase:大写lowercase:小写capitalize:首字母大写
white-space:空白处理,用于设置元素内文本的空白处理方式,如white-space: nowrap;normal:默认处理方式nowrap:不换行pre:保留空白pre-line:保留换行pre-wrap:保留空白和换行
text-shadow:文本阴影,用于设置元素内文本的阴影效果,如text-shadow: 2px 2px 2px #000;, 水平位移、垂直位移、模糊半径、阴影颜色
列表属性
list-style-type:列表标记类型,用于设置列表项的标记类型,如list-style-type: disc;disc:实心圆circle:空心圆square:实心方块decimal:数字decimal-leading-zero:数字前补零lower-roman:小写罗马数字upper-roman:大写罗马数字lower-alpha:小写字母upper-alpha:大写字母none:无标记
list-style-image:列表标记图片,用于设置列表项的标记图片,如list-style-image: url('list.png');list-style-position:列表标记位置,用于设置列表项的标记位置,如list-style-position: inside;inside:内部outside:外部
盒模型与布局属性
Box Model
content:内容区域,用于显示元素的内容,如width、height,min-width、max-width、min-height、max-height用于设置元素的最小宽度、最大宽度、最小高度、最大高度。overflow用于设置元素内容溢出时的处理方式,如overflow: hidden;、overflow: auto;、overflow: scroll;padding:内边距区域,用于设置元素内边距,如padding: 10px;border:边框区域,用于设置元素边框,如border: 1px solid #000;(solid、dotted、dashed、double、groove、ridge、inset、outset)margin:外边距区域,用于设置元素外边距,如margin: 10px;
边界重叠:当两个或多个垂直外边距相遇时,它们将合并为一个外边距,合并后的外边距为相遇外边距中的最大外边距,这种现象称为边界重叠。
定位方式
display
block: 区块层级,可以设置宽度高度留白与边界inline: 行内层级,不可以设置宽度高度留白与边界inline-block: 行内块层级,可以设置宽度高度留白与边界none: 不占据空间
position
static: 默认定位,元素按照文档流排列relative: 相对定位,元素相对于自身原始位置定位absolute: 绝对定位,元素相对于最近的非static定位祖先元素定位fixed: 固定定位,元素相对于视口定位sticky: 粘性定位,元素相对于视口定位,直到滚动到指定位置
top、right、bottom、left:用于设置元素的定位偏移量,如 top: 10px;,只有在设置了定位属性后才能使用。
z-index:用于设置元素的堆叠顺序,数值越大越靠前,如 z-index: 1;,只有在设置了定位属性后才能使用。
float:用于设置元素的浮动方式,如 float: left;,取值有 left、right、none,clear 用于设置元素的浮动清除方式,如 clear: both;
visibility:用于设置元素的可见性,如 visibility: hidden;,取值有 visible、hidden
box-shadow:用于设置元素的阴影效果,如 box-shadow: 2px 2px 2px #000;,水平位移、垂直位移、模糊半径、阴影颜色
vertical-align:用于设置元素的垂直对齐方式,如 vertical-align: middle;,取值有 baseline、top、middle、bottom、text-top、text-bottom
什么是
float
float原本的设计初衷是让元素浮动在文字周围,最初用于实现图文混排(如图像左浮动,文字右环绕),当我们给元素设置float: left或float: right后,它就会:
- 脱离标准文档流(不会再占据原本位置);
- 在容器中向左或右浮动,后续的非浮动元素会围绕它排列;
- 仍然保留在 DOM 结构中,但对兄弟元素的布局产生影响;
- 它的父元素若没有特殊处理,将不再被它撑开高度,这就是所谓“高度塌陷”问题。
什么是
clear
clear是专门用来控制元素是否可以出现在浮动元素旁边的属性,它的作用是“清除前面浮动元素对我的影响”,可选值包括:
clear: left:不允许出现在左侧有浮动的元素旁;clear: right:不允许出现在右侧有浮动的元素旁;clear: both:两边都不允许,必须换行到浮动元素的下方;clear: none:默认值,不清除任何浮动影响。
二者关系和实际用途
float用于创建浮动布局,比如实现横向排列、图文环绕;clear用于清除浮动影响,保证某些元素不会被环绕,或者用于“清除浮动”本身;- 清除浮动的典型场景是父元素被浮动子元素高度塌陷,这时我们会在父元素内部末尾添加一个设置了
clear: both的元素(推荐用伪元素),如:
1
2
3
4
5 .parent::after {
content: "";
display: block;
clear: both;
}
修改 display 会触发 重排(reflow) 和 重绘(repaint),因为它会影响元素是否参与布局(布局树会发生变化);
修改 visibility 只会触发 重绘(repaint),不会触发重排,因为它不会影响布局,仅仅是改变了元素是否可见。
背景、渐层与表格
背景属性
background-image:背景图片,用于设置元素的背景图片,如background-image: url('bg.png');background-repeat:背景重复,用于设置元素的背景图片重复方式,如background-repeat: no-repeat;repeat:默认值,横向纵向都重复repeat-x:横向重复repeat-y:纵向重复no-repeat:不重复space:平铺,间距相等,调整间距让图片铺满round:平铺,间距不等,调整大小让图片铺满
background-position:背景位置,用于设置元素的背景图片位置,如background-position: center center;top、bottom、left、right、center- 百分比值:如
50% 50% - 长度值:如
10px 20px,第一个值是水平位置,第二个值是垂直位置
background-attachment:背景附着,用于设置元素的背景图片是否随元素滚动,如background-attachment: fixed;scroll:默认值,背景图片随元素滚动fixed:背景图片固定在视口local:背景图片随元素滚动
background-clip:背景显示区域,如background-clip: padding-box;border-box:默认值,描绘到边框盒padding-box:描绘到内边距盒content-box:描绘到内容盒
background-origin:背景原点,用于设置元素的背景图片定位原点,如background-origin: padding-box;border-box:默认值,背景图片定位原点在边框盒padding-box:背景图片定位原点在内边距盒content-box:背景图片定位原点在内容盒
background-size:背景尺寸,用于设置元素的背景图片尺寸,如background-size: cover;auto:默认值,保持原始尺寸cover:图片等比例缩放,覆盖整个容器contain:图片等比例缩放,适应容器- 百分比值:如
50% 50%,第一个值是宽度,第二个值是高度 - 长度值:如
100px 200px,第一个值是宽度,第二个值是高度
渐变属性
linear-gradient:线性渐变,用于设置元素的背景线性渐变效果,如linear-gradient(to right, red, blue);to top、to right、to bottom、to left、to top right、to top left、to bottom right、to bottom leftangle:如45deg、90deg
radial-gradient:放射状渐变,用于设置元素的背景放射状渐变效果,如radial-gradient(circle, red, blue);circle、ellipse是渐变形状closest-side、closest-corner、farthest-side、farthest-corner是渐变大小at:如at 50% 50%,渐变中心点
repeating-linear-gradient:重复线性渐变,用于设置元素的背景重复线性渐变效果,如repeating-linear-gradient(to right, red, blue);repeating-radial-gradient:重复放射状渐变,用于设置元素的背景重复放射状渐变效果,如repeating-radial-gradient(circle, red, blue);
表格属性
caption-side:表格标题位置,用于设置表格标题的位置,如caption-side: bottom;top:顶部bottom:底部
border-collapse:边框合并,用于设置表格边框合并方式,如border-collapse: collapse;separate:默认值,边框分开collapse:边框合并
table-layout:表格布局,用于设置表格布局方式,如table-layout: fixed;auto:默认值,根据内容自动调整fixed:固定布局,根据表格宽度和列宽度确定单元格宽度
empty-cells:空单元格,用于设置表格空单元格显示方式,如empty-cells: hide;show:默认值,显示空单元格hide:隐藏空单元格
border-spacing:边框间距,用于设置表格边框间距,如border-spacing: 10px;
变形、转场
变形处理
transform:变形效果,用于设置元素的变形效果,如transform: rotate(45deg);rotate(angle):旋转,顺时针旋转angle角度scale(x, y):缩放,横向缩放x倍,纵向缩放y倍translate(x, y):平移,横向平移x距离,纵向平移y距离skew(x-angle, y-angle):倾斜,横向倾斜x-angle角度,纵向倾斜y-angle角度matrix(a, b, c, d, e, f):矩阵变形
transform-origin:变形原点,用于设置元素的变形原点,如transform-origin: 50% 50%;- 百分比值:如
50% 50% - 长度值:如
100px 200px,第一个值是水平位置,第二个值是垂直位置
- 百分比值:如
转场效果
transition:转场效果,用于设置元素的转场效果,如transition: width 1s;transition-property:转场属性,如transition-property: width;all:所有属性none:无属性
transition-duration:转场时长,如transition-duration: 1s;transition-timing-function:转场速度曲线,如transition-timing-function: ease;ease:默认值,慢速开始,然后变快,然后慢速结束linear:匀速ease-in:慢速开始ease-out:慢速结束ease-in-out:慢速开始和结束
transition-delay:转场延迟时间,如transition-delay: 0.5s;
