CSS 单位和值
CSS 单位和值是样式属性的基础,它们决定了元素的尺寸、位置、颜色等特性。理解不同的单位和值类型对于精确控制网页布局和样式至关重要。
长度单位
绝对长度单位
绝对长度单位在所有媒体上都表示固定的物理长度。
px (像素)
像素是最常用的单位,是数字显示设备上的一个点。
css
.element {
width: 200px;
font-size: 16px;
border: 1px solid black;
}其他绝对单位
css
.inches {
width: 1in; /* 1 英寸 = 96px */
}
.centimeters {
width: 2.54cm; /* 1 英寸 = 2.54 厘米 */
}
.millimeters {
width: 25.4mm; /* 1 厘米 = 10 毫米 */
}
.points {
font-size: 12pt; /* 1 点 = 1/72 英寸 */
}
.picas {
width: 6pc; /* 1 派卡 = 12 点 */
}相对长度单位
相对长度单位相对于其他元素或视口尺寸。
% (百分比)
百分比相对于父元素的相应属性。
css
.half-width {
width: 50%; /* 父元素宽度的 50% */
}
.double-height {
height: 200%; /* 父元素高度的 200% */
}em
em 单位相对于元素的字体大小。如果用于字体大小,相对于父元素的字体大小。
css
.text {
font-size: 1.2em; /* 相对于父元素字体大小 */
padding: 1em; /* 相对于当前元素字体大小 */
}
.nested {
font-size: 1.2em; /* 相对于父元素字体大小 */
}
/* 如果父元素字体大小是 16px,那么 .nested 的字体大小是 19.2px */rem
rem 单位相对于根元素(html)的字体大小。
css
html {
font-size: 16px;
}
.text {
font-size: 1.2rem; /* 总是相对于根元素字体大小,即 19.2px */
margin: 2rem; /* 总是 32px */
}ex 和 ch
- ex: 相对于字符 "x" 的高度
- ch: 相对于字符 "0" 的宽度
css
.ex-unit {
line-height: 2ex;
}
.ch-unit {
width: 20ch; /* 大约 20 个字符的宽度 */
}视口百分比长度
vw (视口宽度)
vw 单位相对于视口宽度的百分比。
css
.full-width {
width: 100vw; /* 视口宽度的 100% */
}
.half-width {
width: 50vw; /* 视口宽度的 50% */
}vh (视口高度)
vh 单位相对于视口高度的百分比。
css
.full-height {
height: 100vh; /* 视口高度的 100% */
}
.half-height {
height: 50vh; /* 视口高度的 50% */
}vmin 和 vmax
- vmin: 视口宽度和高度中较小值的百分比
- vmax: 视口宽度和高度中较大值的百分比
css
.square {
width: 50vmin;
height: 50vmin; /* 创建一个正方形,边长为视口较小尺寸的 50% */
}
.large-element {
width: 80vmax; /* 占据视口较大尺寸的 80% */
}颜色值
颜色关键字
CSS 定义了 148 个颜色关键字。
css
.red {
color: red;
}
.blue {
background-color: blue;
}
.transparent {
color: transparent;
}十六进制颜色
十六进制颜色由 # 和 3 位或 6 位十六进制数组成。
css
.short {
color: #f00; /* 红色 */
}
.long {
color: #ff0000; /* 红色 */
}
.with-alpha {
color: #ff000080; /* 带透明度的红色 */
}RGB 颜色
RGB 颜色由红、绿、蓝三原色组成。
css
.rgb {
color: rgb(255, 0, 0); /* 红色 */
}
.rgba {
color: rgba(255, 0, 0, 0.5); /* 半透明红色 */
}HSL 颜色
HSL 颜色由色相(Hue)、饱和度(Saturation)、亮度(Lightness)组成。
css
.hsl {
color: hsl(0, 100%, 50%); /* 红色 */
}
.hsla {
color: hsla(0, 100%, 50%, 0.5); /* 半透明红色 */
}currentColor
currentColor 关键字表示当前元素的 color 属性值。
css
.element {
color: blue;
border: 2px solid currentColor; /* 边框颜色与文字颜色相同 */
}数字和函数值
数字 (number)
无单位的数值。
css
.opacity {
opacity: 0.5;
}
.scale {
transform: scale(1.2);
}整数 (integer)
整数值。
css
.z-index {
z-index: 10;
}
.column-count {
column-count: 3;
}函数值
calc()
calc() 函数允许进行数学计算。
css
.dynamic-width {
width: calc(100% - 40px);
}
.complex-calc {
width: calc(50% + 20px - 1em);
}attr()
attr() 函数返回元素属性的值。
css
a::after {
content: " (" attr(href) ")";
}url()
url() 函数用于指定资源路径。
css
.background {
background-image: url('image.jpg');
}
.cursor {
cursor: url('cursor.cur'), pointer;
}角度单位
deg (度)
css
.rotate {
transform: rotate(45deg);
}grad (梯度)
css
.rotate {
transform: rotate(50grad); /* 50 梯度 = 45 度 */
}rad (弧度)
css
.rotate {
transform: rotate(0.785rad); /* 0.785 弧度 ≈ 45 度 */
}turn (转)
css
.rotate {
transform: rotate(0.125turn); /* 0.125 转 = 45 度 */
}时间单位
s (秒)
css
.duration {
transition-duration: 2s;
}ms (毫秒)
css
.duration {
transition-duration: 300ms;
}频率单位
Hz (赫兹)
css
.speech {
voice-pitch: 200Hz;
}kHz (千赫兹)
css
.speech {
voice-pitch: 0.2kHz;
}分辨率单位
dpi (每英寸点数)
css
.high-res {
resolution: 300dpi;
}dpcm (每厘米点数)
css
.print {
resolution: 118dpcm;
}dppx (每像素点数)
css
.retina {
resolution: 2dppx;
}自定义属性 (CSS 变量)
自定义属性允许定义可重用的值。
css
:root {
--main-color: #3498db;
--spacing-unit: 1rem;
--border-radius: 4px;
}
.element {
color: var(--main-color);
padding: var(--spacing-unit);
border-radius: var(--border-radius);
}全局值
initial
设置属性为其初始值。
css
.element {
color: initial; /* 设置为 color 属性的初始值 */
}inherit
继承父元素的值。
css
.element {
color: inherit; /* 继承父元素的 color 值 */
}unset
如果属性自然继承,则表现为 inherit,否则表现为 initial。
css
.element {
color: unset;
}revert
重置为 UA 样式表中定义的值。
css
.element {
display: revert;
}实际应用示例
响应式字体大小
css
html {
font-size: 16px;
}
@media (min-width: 768px) {
html {
font-size: 18px;
}
}
@media (min-width: 1200px) {
html {
font-size: 20px;
}
}
.text {
font-size: 1.2rem; /* 响应式字体大小 */
}流体布局
css
.container {
width: calc(100% - 2rem);
margin: 1rem;
}
.column {
width: calc(50% - 1rem);
float: left;
margin-right: 1rem;
}视口单位的应用
css
.hero {
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
.full-width-banner {
width: 100vw;
background: linear-gradient(to right, #ff0000, #0000ff);
}CSS 变量的实际使用
css
:root {
--primary-color: #3498db;
--secondary-color: #2ecc71;
--text-color: #333;
--spacing-small: 0.5rem;
--spacing-medium: 1rem;
--spacing-large: 2rem;
--border-radius: 4px;
}
.button {
background-color: var(--primary-color);
color: white;
padding: var(--spacing-medium);
border-radius: var(--border-radius);
border: none;
cursor: pointer;
}
.button:hover {
background-color: var(--secondary-color);
}
.card {
padding: var(--spacing-large);
margin: var(--spacing-small);
border-radius: var(--border-radius);
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}单位选择建议
- 字体大小:使用 rem 单位以确保可访问性
- 组件间距:使用 em 或 rem 单位以保持比例关系
- 布局宽度:使用 %、vw 或 flexbox/grid 以实现响应式设计
- 边框和阴影:使用 px 以保持精确控制
- 媒体查询:使用 em 或 rem 单位以匹配字体大小变化
浏览器兼容性
- 大多数单位在所有现代浏览器中都有良好支持
- 视口单位 (vw, vh, vmin, vmax) 在 IE9+ 支持
- CSS 变量在 IE 不支持,需要在其他现代浏览器中使用
- calc() 在 IE9+ 支持,但某些复杂表达式可能不支持
总结
理解 CSS 单位和值对于精确控制网页样式和布局至关重要。不同的单位适用于不同的场景,合理选择单位可以帮助我们创建响应式、可维护和可访问的网页。掌握这些概念是成为优秀前端开发人员的基础。