值与单位
CSS中的值和单位有哪些?
答案
核心概念
CSS值和单位系统提供了多种方式来表示尺寸、颜色、时间等属性值,正确选择单位对于创建响应式和可维护的样式至关重要。
长度单位
-
绝对单位
px
:像素,最常用的单位pt
:点,主要用于打印cm
、mm
、in
:厘米、毫米、英寸
-
相对单位
em
:相对于父元素的字体大小rem
:相对于根元素的字体大小%
:相对于父元素的百分比vw
、vh
:视口宽度/高度的百分比vmin
、vmax
:视口较小/较大尺寸的百分比
颜色值
- 关键字:
red
、blue
、transparent
- 十六进制:
#ff0000
、#f00
- RGB/RGBA:
rgb(255, 0, 0)
、rgba(255, 0, 0, 0.5)
- HSL/HSLA:
hsl(0, 100%, 50%)
、hsla(0, 100%, 50%, 0.5)
时间单位
s
:秒ms
:毫秒
角度单位
deg
:度rad
:弧度turn
:圈数
代码示例
/* 长度单位示例 */
.container {
width: 100%; /* 相对于父元素宽度 */
max-width: 1200px; /* 绝对像素值 */
font-size: 1.2rem; /* 相对于根元素字体大小 */
padding: 2em; /* 相对于当前元素字体大小 */
height: 50vh; /* 视口高度的50% */
}
/* 颜色值示例 */
.element {
color: #333; /* 十六进制 */
background: rgba(255, 0, 0, 0.5); /* RGBA */
border-color: hsl(120, 100%, 50%); /* HSL */
}
/* 动画时间单位 */
.animation {
transition: all 0.3s ease;
animation: rotate 2s infinite;
}
@keyframes rotate {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
/* 响应式单位应用 */
.responsive {
font-size: clamp(14px, 2.5vw, 24px); /* 响应式字体 */
margin: calc(1rem + 2vw); /* 计算值 */
}
单位选择建议
场景 | 推荐单位 | 原因 |
---|---|---|
字体大小 | rem 、em | 可缩放,易于维护 |
边距间距 | rem 、em | 与字体大小成比例 |
容器宽度 | % 、vw | 响应式布局 |
边框宽度 | px | 精确控制 |
媒体查询 | em 、rem | 适应用户字体设置 |
display none 和 visibility hidden 区别
答案
核心概念
display: none
和 visibility: hidden
都是用来隐藏元素的方法,但它们在页面渲染和布局上有本质区别。
主要区别
-
渲染树中的表现
display: none
会让元素完全从渲染树中消失,渲染的时候不占据任何空间visibility: hidden
不会让元素从渲染树消失,渲染时元素继续占据空间,只是内容不可见
-
继承性
display: none
是非继承属性,子孙节点消失由于元素从渲染树消失造成,通过修改子孙节点属性无法显示visibility: hidden
是继承属性,子孙节点消失由于继承了 hidden,通过设置visibility: visible
可以让子孙节点显式
-
重排重绘影响
- 修改常规流中元素的 display 通常会造成文档重排
- 修改 visibility 属性只会造成本元素的重绘
-
可访问性
- 读屏器不会读取
display: none
元素内容 - 读屏器会读取
visibility: hidden
元素内容
- 读屏器不会读取
示例说明
面试官视角
该题考察对 CSS 渲染机制的理解,是前端面试中常见的基础题。面试官通过此题可以了解候选人对浏览器渲染流程的理解程度。
延伸阅读
px 如何转为 rem
答案
核心概念
px
(像素)转换为 rem
(根元素字体大小的相对单位)需要先确定一个基准的根元素字体大小。通常,我们将根元素(<html>
)的字体大小设置为一个特定的值,比如 16px
。
转换公式
假设根元素的字体大小为 16px
,那么转换公式为:rem 值 = px 值 / 16
例如,如果有一个元素的宽度为 100px
,转换为 rem
就是:100 / 16 = 6.25rem
自动转换方法
使用 CSS 预处理器
Sass 示例:
@function pxToRem($pxValue) {
@return $pxValue / 16 + rem;
}
.element {
width: pxToRem(100);
}
Less 示例:
.pxToRem(@pxValue) {
@remValue: @pxValue / 16;
@return @remValue + rem;
}
.element {
width: pxToRem(100);
}
使用 PostCSS 插件
可以使用 postcss-pxtorem
插件实现自动转换:
// postcss.config.js
module.exports = {
plugins: {
'postcss-pxtorem': {
rootValue: 16,
propList: ['*']
}
}
}
面试官视角
该题考察对 CSS 单位系统和响应式设计的理解,是前端开发中的实用知识点。面试官通过此题可以了解候选人对现代 CSS 开发工具链的熟悉程度。
延伸阅读
calc
答案
核心概念
CSS 属性计算函数 calc()
是用来进行动态的尺寸计算以及数值混合运算的一种函数。它增强了纯 CSS 的灵活性,允许你在属性值的设置中直接执行基础的加(+
)、减(-
)、乘(*
)、除(/
)运算。
基本语法
property: calc(expression);
其中,expression
可以包括:
- 其他 CSS 单位值
- 数字常量
- 括号来控制运算顺序
基础示例
.element {
width: calc(100% - 50px); // 宽度是容器宽度减50px
padding: calc(1em + 10px); // 上下内边距是当前字体尺寸的1em加上10px
margin: calc(10px / 2); // 外边距为5px
font-size: calc(12px + 2vw); // 根据视窗宽度改变字体大小
}
高级用法
使用 calc()
的同时可以嵌套使用 min()
和 max()
函数,这种组合对响应式设计非常有用。
.element {
width: calc(min(100%, 500px)); // 宽度始终是容器的100%,但不超过500px
font-size: calc(max(12px, 1vw)); // 在某些实现中此用法可能不生效
}
注意事项
- 在进行除法运算时,要注意除数不能为零
- CSS 变量可以在
calc()
中使用,使得你能够进行更灵活的样式控制 calc()
必须确保表达式的两侧是兼容的单位,比如不能将像素(px
)和百分比(%
)相除- 运算符之间需要有空格。
calc(50% -50px)
是无效的,而calc(50% - 50px)
是有效的
实际应用场景
calc()
的一个常见用途是在响应式设计中,你可以用 calc()
来设置一个固定宽度和视口宽度的融合:
.container {
width: calc(100% - 20px); /* 虚拟列不存在时,容器宽度为屏幕宽度减去20px */
}
.grid {
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
// 这部分代码创建一个栅格布局,其中每一格至少宽250px,每列最大填充至填满屏幕
}
面试官视角
该题考察对 CSS 高级特性的理解,是前端开发中的实用知识点。面试官通过此题可以了解候选人对现代 CSS 功能的掌握程度。
延伸阅读
line-gradient
答案
核心概念
在 CSS 中,设置渐变色可以使用 background
属性和相应的渐变函数。CSS 提供两种类型的渐变:线性渐变(linear-gradient
)和径向渐变(radial-gradient
)。
线性渐变(Linear Gradient)
线性渐变是从一个点到另一个点的颜色过渡。它可以通过以下方式设置:
.element {
background: linear-gradient(direction, color-stop1, color-stop2, ...);
}
direction
:定义渐变的方向,可以是角度(如45deg
)或预定义的关键词(如to bottom
,to top
,to right
,to left
)color-stop1
,color-stop2
,...:渐变中颜色停止点,至少需要两个
示例说明
径向渐变(Radial Gradient)
径向渐变是从中心点向外扩散的颜色过渡:
.element {
background: radial-gradient(shape size at position, start-color, ..., last-color);
}
面试官视角
该题考察对 CSS 渐变功能的掌握,是前端开发中的实用知识点。面试官通过此题可以了解候选人对 CSS 视觉效果实现的熟悉程度。
延伸阅读
size
答案
CSS尺寸设置的单位包括:
-
像素(Pixel,缩写为px):是最常用的单位,表示屏幕上的一个点,可以精确地指定元素的大小。
-
百分比(Percentage,缩写为%):相对于父元素的大小,可以根据父元素的大小来设置子元素的大小。
-
em:相对于当前元素的字体大小,用于设置字体大小时很常用。
-
rem:相对于根元素(即html元素)的字体大小。
-
vh/vw:相对于视口(Viewport)的高度和宽度。
-
cm、mm、in、pt、pc等长度单位:用于打印样式表,不建议在Web开发中使用。
-
自定义单位:可以通过CSS的calc()函数自定义单位,比如使用“1fr”作为网格布局中的单位。
需要注意的是,不同的浏览器可能会有不同的计算方式和默认值,因此在设置尺寸时需要进行充分的测试和兼容性处理。