本文是系列文章的一部分:Web 基础知识
本文将介绍层叠样式表,详细说明它们是什么、它们允许什么,以及如何使用它们来弯曲和设置 HTML 样式,从而以有效的方式构成美观且响应迅速的设计。
我们不要浪费时间,立即开始吧。
CSS简介
在上一篇文章中,我们讨论了 HTML 如何构成 Web 的骨架。这个描述非常贴切,因为它为我们的布局和元素提供了必要的结构。而 CSS 则让我们能够控制 CSS 提供的所有属性,从而构建任何我们想要的内容。
CSS 定义了用于设置组件主题和构建界面的样式机制。它是 Web 开发中必不可少的工具。闲话少叙,让我们深入了解它的功能。
选择器
CSS 选择器在文件内部使用.css
,以定位 HTML 元素并允许应用 CSS 规则。
有五种基本的 CSS 选择器:
选择器 | 用法 | 目标 | 使用示例 |
---|---|---|---|
普遍的 | * {} |
所有元素 | 将间距或 alpha 值应用于所有元素 |
班级 | .example {} |
所有具有给定类的 | 将相同的样式应用于多个元素 |
ID | #example {} |
所有具有给定 ID 的 | 将样式应用于特定元素 |
类型 | h1 {} 或者button {} |
所有具有给定类型的 | 将样式应用于原生 HTML 元素 |
属性 | [type="submit"] {} |
所有具有给定属性的 | 仅对"提交"类型的按钮应用样式 |
🤓 我建议使用
.class
选择器,#id
因为 ID 属性是唯一的
分组选择器
您可以使用逗号将选择器分组到一条 CSS 规则下,以便在多个选择器之间共享属性:
css
.foo { color: red;}#bar { color: blue;}// The padding will apply to both selectors.foo, #bar { padding: 1rem;}
组合选择器
您还可以使用各种语法组合选择器来定位从后代到兄弟的任何内容:
css
/* 这将针对所有<h1>,它们是<section>标记的后代,不管它们是如何嵌套的. */
section h1 { color: red;}
/* 这将针对所有<h2>标签,它们是<section>标签的直接子标签。一旦它们嵌套在另一个标签中,它将不再适用. */
section > h2 { color: orange;}
/* 这将只针对紧跟在<section>标签之后的下一个<h3>标签. */
section + h3 { color: yellow;}
/* 这将针对所有与<section>标签具有相同父元素的<h4>标签. */
section ~ h4 { color: green;}
选择器还可以用于定位浏览器伪元素:
css
/* 它的目标是标准HTML输入字段中的占位符文本 */
input::placeholder { color: #ddd;}
使用多种组合器和选择器,您可以轻松地设置 Web 文档任何部分的样式。
⚡**实例:选择器**
选择器非常广泛要详细了解您可以使用它们实现什么,请点击下面的链接。
📚 MDN:选择器
级联、继承和特异性
CSS 中存在一组明确的层级结构,这些结构可能难以解析。由于这些主题需要的解释比本文的平均章节要多,因此我们选择将其单独列出!
单位和值类型
CSS 包含许多单元。然而,就 Web 而言,你通常会遇到以下这些单元:
绝对单位
虽然 CSS 包含多个绝对单位,但它们主要用于打印。然而,在 Web 上,你只会找到一个:
单元 | 行为 |
---|---|
px |
最常见的单位。它是一个静态值,不会自行调整大小。 |
关于绝对单位的警告
网络是响应式的。网站和应用程序必须适应多种外形尺寸,因此
px
不应在需要根据用户环境(即视口、缩放级别或字体大小)调整大小的元素中使用值。
相对单位复制链接
相对单位在网络上占据主导地位。这是最常见的单位类型,理由很充分;它们使我们能够设计响应式、动态的应用程序和网站。让我们来看看它们!
父母大小单位复制链接
单元 | 行为 |
---|---|
% |
相对于父元素。将内部元素的高度设置为50% 将使其达到父元素高度的 50%。 |
视口单位复制链接
单元 | 行为 |
---|---|
vw |
相对于视口的宽度。更改窗口的宽度将导致元素的宽度发生变化。 |
vh |
相对于视口的高度。更改窗口的高度将导致元素的高度发生变化。 |
既然我们已经了解了这两种类型的单元,我认为有必要以实际的方式强调一下它们之间的区别。在下面的演示中,您可以在它们之间切换,并查看它们在框架内的行为。
字体大小单位复制链接
单元 | 行为 |
---|---|
em |
相对于父元素的font-size 。 |
rem |
相对于的。我们很快会讨论更多关于:root 的。font-size``:root |
印刷单位复制链接
单元 | 行为 |
---|---|
ch |
等于字体"0"字符的宽度。 |
ex |
等于当前字体的 x 高度。x高度是指小写字符基线到顶部之间的高度。 |
价值观复制链接
某些 CSS 属性仅接受特定的语法和类型。例如color
:
css
.foobar_keyword { color: red; }
.foobar_hex { color: #ff0000; }
.foobar_rgb { color: rgba(255, 0, 0, 1); }
.foobar_integer { color: 12; }
同样的情况也发生在padding
,它只接受数值:
css
.foobar { padding: "Hello"; }
确保值的格式也很重要。将数值放在引号内会将其转换为字符串值!
css
.foobar { padding: 12px; }
.foobar { padding: "12px"; }
了解更多
我们只是粗略地介绍了一下现有功能。如需了解更多信息,请访问以下链接。
📚 MDN:单位和值
速记
在 CSS 中,一些属性可以组合成简写属性,这样可以同时采用多个值。
这样可以保持 CSS 的优化,并从长远来看节省几行代码。border
属性就是一个简写属性的很好例子。

然后我们可以将其缩短为:

最后一个例子同样易读,但占用的空间更少。
变量
CSS 变量允许我们定义任意、可重复使用的值。
在下面的例子中,我们只需改变--green
值即可自动将这些改变传播到.foo
和.bar
元素。
css
:root { --green: #00ff00;}
.foo { background-color: var(--green);}
.bar { color: var(--green);}
使用变量是提高项目可维护性和一致性的好方法,因为它允许您从单个点更新值,而不是使用原始值。
任何有效值都可以成为变量,但你必须谨慎使用它们,并且要小心谨慎。不过别担心,这就是我们要教你的!
声明变量
变量通常在中声明,:root
并在其他任何内容之前声明。
css
:root { --green: #00ff00; --icon-size: 24px; --border-width-xl: 8px; --heading-1-size: 2rem;}
当然,这只是一个过于简单的例子。真正的样式表会包含数十甚至数百个标记,以支持更复杂的用例。
后备方案
现在,var()
s 的一个很棒的特性是允许使用 fallbacks。如果由于某种原因某个变量无法加载,开发者可以声明将要使用的原始值。

您最常看到的是字体声明,因为它们的加载可能很麻烦。
css
:root { --brand-font: "Figtree", Arial, sans-serif;}
特别是对于字体,这意味着布局可以首先加载后备字体,然后在加载后更新为所需的字体。
明显的警告
回退是设计上的最后一搏,仅用作在发生大规模故障时能够显示网页的安全措施。
与它们所替换的变量不同,这些是原始值,并且不是动态的,也不容易被批量编辑。
尽管如此,请务必尽可能添加后备措施,以确保无论出现什么问题,您仍然可以向用户显示内容。
嵌套
在设计系统中,所有事物都有变量是很常见的------颜色、不透明度、边框厚度等等。
这意味着 CSS 需要支持可扩展的变量集,这些变量有时相互依赖,以减少样式声明。
在前面的例子中,我们看到了如何在 中声明变量。为了优化变量的使用,:root
我们可以在 CSS 文件的 中嵌套变量。:root
css
:root {
--green80: #00ff00;
--brand-default: var(--green80);
--button-bg: var(--brand-default);
}
优化rgba()
价值
一个很好的例子就是这个rgba()
函数。它接受一个红色、绿色、蓝色和一个 alpha 值,并以逗号分隔,如下所示。

然而,像这样进行原始颜色声明是不可持续的,因为如果没有变量就很难维护。
值得庆幸的是,CSS 允许我们将这个函数的值分隔开来!
我们可以从函数中分离出rgb
和,并创建这两个值的变量。a
在下图中,函数的第一部分是它自己的颜色声明,然后是 alpha 变量。

这意味着它们的价值可以独立且动态地进行管理。
但我们可以走得更远!
如果我们想重用这个rgba()
值怎么办?我们可以再次将其包装在变量中!

查看下面的示例来了解变量的实际使用情况!
⚡**实例:CSS 变量**
了解有关变量的更多信息CSS 广泛支持变量。请务必阅读以下文档了解更多信息。
功能
在 CSS 中,函数内嵌套变量很常见。你经常会看到calc()
函数被频繁使用。
用于自动化布局的函数的一个很好的例子calc()
如下:
你有一排头像。规范规定它们的高度和宽度均为40px,边距为**-20px**,因此它们会重叠。头像可以改变大小,并且该行在缩放时必须保持其外观。
我们从这个开始:

css
:root { --avatar-size: 40px; --avatar-offset: -20px;}
.avatar { height: var(--avatar-size); width: var(--avatar-size); }
.avatar-row { display: flex; gap: var(--avatar-offset);}
但是,这个解决方案不是动态的,并且不支持头像大小的变化。我们可以使用该calc()
函数来自动化这个过程,如下所示:
css
:root { --avatar-size: 40px; --avatar-offset: calc(0px - var(--avatar-size) / 2); }
.avatar { height: var(--avatar-size); width: var(--avatar-size); }
.avatar-row { display: flex; gap: var(--avatar-offset);}
现在,无论头像大小如何,头像行都会自适应,以保持所需的对齐方式。当我们将其尺寸加倍时,结果正如我们预期的那样:

了解更多
CSS 拥有丰富的函数,在您的前端开发之旅中,您会遇到其中的几种。想要了解更多,请点击下方链接。
定位
CSS 属性position
决定了文档内部的元素流。
CSS 属性top
、bottom
、left
、right
用于定位元素以控制偏移。
元素位置有五种类型:
定位类型 | 行为 |
---|---|
静止的 | - 默认位置。- 不受偏移和顺序的影响。 |
绝对 | - 该元素从文档流中移除并相对于最近的position: relative 父元素进行定位。- 可以相对于父容器进行偏移和排序。 |
固定的 | - 该元素从文档流中移除并相对于初始容器定位。- 可以相对于初始容器进行偏移和排序。 |
相对的 | - 元素正常流动并为子元素提供相对定位。- 可以相对于自身偏移并排序。 |
黏 | - 元素正常流动并"粘"到最近的容器上。- 根据滚动机制,位置relative 之间的混合。fixed - 可以相对于父容器进行偏移和排序。 |

css
.root { position: relative; width: 768px; height: 272px;}
.container { position: absolute; left: 224px; top: 100px; width: 320px; height: 145px; z-index: 90;}
.item { position: absolute; bottom: 50px; right: 90px; width: 213px; height: 65px; z-index: 100;}
z-index
控制元素的顺序,将其置于前面或后面。
什么时候使用定位?
- 用于灯箱、移动菜单、模态窗口和类似的覆盖元素;
- 主要用于从文档流中删除元素;
例如,我们自己的标题是固定的,以便它始终保持在屏幕顶部,位于所有其他元素的顶部。

实时代码示例
我们还有很多东西要学
在本系列 CSS 的第二部分中,我们将讨论 CSS 的继承、层次结构和特异性。内容比较多,所以我们决定把它们分开!
我会在那里和你见面。