Web 基础知识:CSS - 基础知识

本文是系列文章的一部分: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 中存在一组明确的层级结构,这些结构可能难以解析。由于这些主题需要的解释比本文的平均章节要多,因此我们选择将其单独列出!

📝 Web 基础知识: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 类型

📚 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 广泛支持变量。请务必阅读以下文档了解更多信息。

📚 MDN: var()

功能

在 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 拥有丰富的函数,在您的前端开发之旅中,您会遇到其中的几种。想要了解更多,请点击下方链接。

📚 MDN: CSS 函数


定位

CSS 属性position决定了文档内部的元素流。

CSS 属性topbottomleftright用于定位元素以控制偏移。

元素位置有五种类型:

定位类型 行为
静止的 - 默认位置。- 不受偏移和顺序的影响。
绝对 - 该元素从文档流中移除并相对于最近的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控制元素的顺序,将其置于前面或后面。

什么时候使用定位?

  • 用于灯箱、移动菜单、模态窗口和类似的覆盖元素;
  • 主要用于从文档流中删除元素;

例如,我们自己的标题是固定的,以便它始终保持在屏幕顶部,位于所有其他元素的顶部。

实时代码示例

CodeSandbox:定位

我们还有很多东西要学

在本系列 CSS 的第二部分中,我们将讨论 CSS 的继承、层次结构和特异性。内容比较多,所以我们决定把它们分开!

我会在那里和你见面。

相关推荐
斯普信专业组30 分钟前
2025 最好的Coze入门到精通教程(下)
前端·javascript·ui
超龄超能程序猿1 小时前
(5)从零开发 Chrome 插件:Vue3 Chrome 插件待办事项应用
javascript·vue.js·前端框架·json·html5
德育处主任1 小时前
p5.js 圆弧的用法
前端·javascript·canvas
PegasusYu1 小时前
Electron使用WebAssembly实现CRC-16 原理校验
javascript·electron·nodejs·wasm·webassembly·crc·crc16
Arvin6272 小时前
Nginx IP授权页面实现步骤
服务器·前端·nginx
初遇你时动了情3 小时前
react/vue vite ts项目中,自动引入路由文件、 import.meta.glob动态引入路由 无需手动引入
javascript·vue.js·react.js
摇滚侠3 小时前
JavaScript 浮点数计算精度错误示例
开发语言·javascript·ecmascript
xw53 小时前
Trae安装指定版本的插件
前端·trae
天蓝色的鱼鱼4 小时前
JavaScript垃圾回收:你不知道的内存管理秘密
javascript·面试
默默地离开4 小时前
前端开发中的 Mock 实践与接口联调技巧
前端·后端·设计模式