原文: CSS Selector Types – How to Select Elements to Style in CSS

当你想用 CSS 给一个元素添加样式时,你首先要“选择”它。在这篇文章中,我将向你展示七种方法。

以下是在 CSS 中为元素设置样式的语法:

selector {
  /* 在这里设置样式 */
}

你有一个选择器,“瞄准”你想为其设计样式的元素,然后你有一个开放的大括号。大括号之后的样式使用不同的 CSS 属性,然后你用一个闭合的大括号来关闭它。

有许多方法来定位元素。你可以把这些方法称为选择器类型

如果你喜欢视频的话,这里有一个关于在 CSS 中选择元素样式的方法的视频。

下面是 CSS 中的七种选择器类型。

如何在 CSS 中使用通用选择器(*)

通用选择器,即星号(*),允许你选择任何类型的所有元素进行样式设计。下面是一个例子:

* {
  border: 1px solid black;
}

比方说,我们对下面的 HTML 使用这种样式:

<body>
    <h1>CSS styles</h1>
    <p>How to apply styles</p>
    <div>
        <img width="20px" height="20px" src="https://www.freecodecamp.org/news/content/images/size/w150/2022/03/deee.jpg" />
    </div>
</body>

结果如下:

image--3-

你可以看到 bodyh1pdivimg 元素的 border 都是 1px solid black,因为我们使用了通用选择器。

如何在 CSS 中通过标签名称为元素设置样式

你也可以通过使用标签名称来选择元素为其设置样式。下面是一个例子:

p {
  color: red;
}

img {
  width: 100px;
  height: 100px;
}

这些样式声明对所有 p 元素应用 color 为红色(red),对所有 img 元素应用 200px 的宽度(width)和高度(height)。

这是上面的样式如何在这个 HTML 中实现:

<span>I am a span</span>
<p>There is a span above me</p>
<img src="https://www.freecodecamp.org/news/content/images/size/w150/2022/03/deee.jpg" />

结果:

image-383

你可以看到 span 没有被设置样式,只有 imgp 被设置了样式。

如何为 CSS 中的类设置样式

元素接受不同的属性,包括类。你可以根据你在一个元素上指定的类来定位该元素。下面是一个例子:

<div class="container">
    <h2>Hello</h2>
</div>

<div>
    <h2>How are you</h2>
</div>

这里有两个 div,但只有一个具有 container 类的属性。你可以用句号.)加上类来设置样式,像这样:

div {
  border: 1px solid purple;
}

.container {
  border-width: 20px;
}

结果如下:

image--5-

从 CSS 中,我们指定所有的 div 元素都应该有一个 border1px solid purple。但是对于有 container class 的元素,你可以从结果中看到它的 border-width 是 20px。

如何在 CSS 中为 Id 设置样式

class 属性类似,你可以在一个元素上指定一个 id,你可以在 CSS 中对其进行样式设置。

下面是一个例子:

<div class="container">
    <h2>Hello</h2>
</div>

<div id="container">
    <h2>How are you</h2>
</div>

你可以通过使用哈希(#)加上 id 来定位 id 元素,像这样:

#container {
  border-left: 10px solid blue;
}

结果如下:

image-385

使用具有 container id 的元素(无论是 divp 还是任何类型),我们只对第二个 div 元素应用样式。

然而,与类不同,id 必须是唯一的。两个或更多的元素不能有相同的 id,因为这将导致意外的行为。

如何给 CSS 中的其他属性设置样式

我们已经看到了如何选择 classid 属性。如果你想选择其他属性呢?你可以使用方括号([attr])。应该怎么做呢?

让我们看一个例子:

<a href="#">
    Some link
</a>

<p href="https://google.com">
    A paragraph link
</p>

在这个例子中,我们有两个元素:一个 a 标签和一个 p 标签。要为这两个元素设计样式,你可以直接使用它们的标签名:

p, a {
  color: red;
}

逗号允许你一次对多个选择器应用样式。

但另一种可以为这两个元素设置样式的方法是使用它们的属性。它们都有一个 href 属性。

请记住,p 标签中不支持 href 属性,我只是用它来说明一个例子。

下面是你如何使用 href 属性为这两个元素设置样式:

[href] {
  color: red;
}

这个 CSS 将匹配所有带有 href 属性的元素。

下面是结果:

image-386

这两个元素都有 href 属性,所以它们都被选中设置样式。在这里,我们使用了没有值的 href 属性。你也可以指定一个值来具体说明你的目标,就像这样:

[href="#"] {
  color: red;
}

结果是这样的:

image-387

只有 a 标签有带 # 值的 href 属性,所以这是唯一符合我们的样式的元素,你可以从上面的图片中看到。

如何在 CSS 中使用伪类

伪类是一种选择器类型,它允许你在特定的状态下选择元素。仅举几个例子,以下是一些支持的状态:

  • hover(当鼠标浮在一个元素上时)
  • disabled(当一个元素如输入或按钮被禁用时)
  • required(当一个表单元素是必需时)

还有很多,你可以在伪类 MDN 文档中找到。

你可以在元素处于这些状态时应用样式。你可以通过使用冒号:)跟在状态后面来选择状态。下面是一个例子:

<!DOCTYPE html>
<button>
    Hover me
</button>

<!DOCTYPE html> 一行是很重要的,它指定了它是 HTML5,所以伪类可以生效。

这里是 CSS:

:hover {
  background-color: black;
  color: white;
}

这个 CSS 将把这些样式应用到你悬停的任何元素上,结果如下:

image-388

左边的图片是没有悬停状态的。在右边,你可以看到应用在 bodybutton 上的样式,因为我们正在它们上面悬停。

通过悬停在 button 上,你也在悬停在 body 上,因为 buttonbody 的一个子节点。

如何使用 CSS 中的伪元素选择器

伪元素(不同于伪类)是用来选择“一个元素的特定部分”的。不是整个元素——只是一个部分。你也可以用它们来为一个现有的元素添加伪(人造)元素。

这里有一篇关于 CSS 中的伪元素与伪类的详细文章。

下面是一些支持的伪元素选择器:

  • selection:一个元素的高亮部分
  • first-line:一个段落的第一行
  • placeholder:一个输入元素的占位符文本

还有很多,你可以在 MDN 的伪元素文档中找到。

要使用伪元素选择器来应用样式,你可以使用双冒号::)加上伪元素。下面是一个例子:

<!DOCTYPE html>
<input placeholder="Enter some text" />

下面是这个 HTML 的 CSS:

input {
  color: blue;
}

::placeholder {
  color: red;
  font-style: italic;
}
image-389

::placeholder 伪元素选择器为所有表单元素的“占位符部分”设置样式。正如你在上面的例子中看到的,input 元素本身的 color 样式是 blue,但占位符部分的样式不同。

总结

在这篇文章中,我已经向你展示了七种方法,你可以为你选择的元素设计样式。我们看到了:

  • 通用选择器,用于选择所有元素
  • 标签名称,用于选择符合标签名称的元素
  • 类,用于选择带有类属性的元素
  • id 用于选择有 id 属性的元素
  • 属性用于选择有或没有指定值的属性的元素
  • 伪类用于选择特定状态下的元素
  • 伪元素用于选择元素的特定部分

你也可以把这些选择器结合起来,使你想定位的元素更加具体。你可以使用组合器Combinators)来实现这一点。

组合器允许你使用多个选择器,根据符合选择器的元素之间的关系来定位元素。如果你想了解更多,这里有一篇我写的关于组合器的文章

给你一个快速预览——组合器是在多个选择器类型之间使用的,它们允许你根据元素与其他元素的关系来设计样式。

谢谢你阅读本文!