25 CSS变量与嵌套

25 CSS变量与嵌套

CSS变量简介

CSS变量(又称为自定义属性)使得我们能够在样式表中定义重复使用的值。它们以 -- 开头,通常在 :root 选择器中声明,这样可以在整个文档中访问。例如:

1
2
3
4
:root {
--primary-color: #3498db;
--secondary-color: #2ecc71;
}

在这个例子中,我们定义了两个变量:--primary-color--secondary-color。接下来,我们可以在其他选择器中使用这些变量:

1
2
3
4
5
6
7
8
h1 {
color: var(--primary-color);
}

.button {
background-color: var(--secondary-color);
color: white;
}

通过使用 CSS变量,我们可以轻松地修改主题颜色,只需在 :root 中更改变量的值。

CSS变量的优点

  1. 可重用性:在整个样式表中只需定义一次,便可多次使用。
  2. 可维护性:更改变量值即可改变对应的样式,从而减少了重复工作。
  3. 动态:CSS变量可以在运行时通过 JavaScript 动态修改,提供了更大的灵活性。

嵌套选择器

虽然传统的 CSS 不支持嵌套,许多预处理器,如 SASS 和 LESS,提供了这个功能。但在现代 CSS 中可以使用 @layer 来实现一些层叠效果。此外,CSS-in-JS 解决方案(如 Styled Components 和 Emotion)也支持嵌套。

以下是一种实现嵌套效果的 CSS 示例,使用了作用域选择器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.card {
background-color: var(--primary-color);
padding: 20px;
}

.card .title {
font-size: 24px;
color: white;
}

.card .content {
margin-top: 10px;
color: var(--secondary-color);
}

在上述示例中,.title.content.card 的子选择器,这样有效利用了层叠样式的优势。

结合CSS变量与嵌套

利用 CSS 变量与嵌套 selectors 的结合能创建更加灵活的组件样式。以下是一个示例,展示了如何在嵌套中使用变量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.button {
--button-bg: var(--primary-color);
--button-text: white;

background-color: var(--button-bg);
color: var(--button-text);
padding: 10px 20px;
border: none;
border-radius: 5px;
}

.button:hover {
background-color: var(--secondary-color);
}

在这个例子中,.button 的背景色和文本颜色都是使用了 CSS 变量。通过这种方式,我们可以轻松实现按钮的状态变换,且保持代码的整洁与可读性。

总结

通过有效的使用 CSS 变量与嵌套,我们能够创建灵活、高效且易于维护的样式表。利用变量实现主题统一与样式的可变性,同时通过嵌套保持选择器的语义清晰,使我们的 CSS 代码更加易读与高效。

26 混合与继承

26 混合与继承

在CSS中,“混合”和“继承”是两个重要的概念,能够影响样式的应用和组织。通过理解这两个概念,我们可以更好地管理和应用样式。

继承(Inheritance)

CSS中的继承指的是某些属性的值会从父元素继承到子元素。并不是所有的CSS属性都会被继承,典型的继承属性包括 colorfont-familyline-height。而像 marginpadding 这类盒模型属性则不支持继承。

继承的示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>继承示例</title>
<style>
.parent {
color: blue; /* 该属性会被继承 */
font-family: Arial; /* 该属性也会被继承 */
}

.child {
/* 将使用父元素的色彩和字体 */
}

.no-inherit {
margin: 20px; /* 不会被继承 */
}
</style>
</head>
<body>
<div class="parent">
这是父元素
<div class="child">
这是子元素
</div>
<div class="no-inherit">
这个元素的 margin 不会被继承。
</div>
</div>
</body>
</html>

在这个例子中,子元素 .child 会继承父元素 .parentcolorfont-family,因此文本颜色会显示为蓝色,字体为 Arial。而 .no-inherit 元素的 margin 是独立的,并不会受到父元素的影响。

混合(Mixins)

混合(或称为“组合”)是可以复用样式的一种方法。混合允许你为常用的样式定义一套规则,然后通过类的方式重用这些样式。使用CSS预处理器(如Sass或Less)时,混合的概念尤为重要,但在原生CSS中,我们可以通过类的组合实现类似的效果。

混合的示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>混合示例</title>
<style>
.button {
padding: 10px 15px;
border: none;
border-radius: 5px;
cursor: pointer;
}

.primary {
background-color: blue;
color: white;
}

.secondary {
background-color: gray;
color: black;
}
</style>
</head>
<body>
<button class="button primary">主要按钮</button>
<button class="button secondary">次要按钮</button>
</body>
</html>

在这个例子中,我们定义了一个 .button 类作为基础样式,用于所有按钮。然后,我们通过 .primary.secondary 类来定义按钮的不同风格。通过这样的组合,我们有效地复用了基础样式,同时又为不同的状态提供了个性化的排列。

总结

  • 继承:CSS属性会从父元素自动传递到子元素,影响到文档结构中的样式一致性。
  • 混合:通过组合类,重用样式,提高CSS的可维护性和可复用性。

通过掌握这两个概念,可以更高效灵活地编写和维护你的CSS代码。

功能与计算

功能与计算

CSS 功能简介

CSS(层叠样式表)是用于描述网页的表现形式的语言。它通过选择器、属性和属性值对HTML元素进行样式化。理解其核心功能是掌握CSS的基础。

选择器

选择器用于选择 원하는 HTML 元素。常用的选择器包括:

  • 类型选择器:选择所有指定类型的元素,例如 p 选择所有 <p> 标签。

    1
    2
    3
    p {
    color: blue;
    }
  • 类选择器:选择具有指定类名的元素,以.开头,例如 .example 选择所有类为 example 的元素。

    1
    2
    3
    .example {
    font-size: 20px;
    }
  • ID选择器:选择具有指定ID的元素,以 # 开头,例如 #header 选择 ID 为 header 的元素。

    1
    2
    3
    #header {
    background-color: lightgray;
    }

CSS 计算属性

CSS 提供了多种计算功能,以便根据条件动态计算样式。例如,我们可以使用 calc() 函数进行简单的数学运算。

使用 calc()

calc() 函数允许我们进行动态的宽度、高度计算等,能够使用加法、减法、乘法和除法。

示例:动态宽度

假设我们需要一个宽度是父元素宽度的一半减去20px的按钮:

1
2
3
<div class="container">
<button class="dynamic-button">点击我</button>
</div>
1
2
3
4
5
6
7
8
9
10
11
12
.container {
width: 100%;
padding: 10px;
background-color: #f0f0f0;
}

.dynamic-button {
width: calc(50% - 20px);
padding: 10px;
background-color: #007BFF;
color: white;
}

在这个例子中,按钮的宽度将会自动适应父容器的大小,并且随之变化。

使用 var()

CSS 变量(自定义属性)使样式更易于管理和计算。我们可以使用 var() 函数来调用这些变量。

示例:使用 CSS 变量进行计算

1
2
3
4
5
6
7
8
9
10
11
:root {
--main-padding: 15px;
--button-width: calc(100% - var(--main-padding) * 2);
}

.button {
width: var(--button-width);
padding: var(--main-padding);
background-color: #28a745;
color: white;
}

在该示例中,通过定义 CSS 变量 --main-padding--button-width,我们实现了组件的可重用性和易于维护。

媒体查询中的计算

在响应式设计中,calc() 和 CSS 变量常常用于媒体查询中,以确保布局在不同屏幕尺寸下正常展示。

示例:响应式容器

1
2
3
4
5
6
7
8
9
10
11
.container {
width: calc(100% - 40px);
margin: 20px;
}

@media (max-width: 600px) {
.container {
width: calc(100% - 10px);
margin: 5px;
}
}

在这个示例中,不同屏幕宽度下,容器的宽度和边距会自动调整。

小结

CSS 提供了强大的功能,通过选择器来应用样式,并借助 calc() 和 CSS 变量等计算方法来动态调整属性值。理解这些核心功能将帮助我们更有效地编写和维护样式代码。