小熊奶糖(BearCandy)
小熊奶糖(BearCandy)
发布于 2024-04-26 / 16 阅读
0
0

CSS 选择器

CSS选择器是用于选择文档中特定元素以便应用样式的强大工具。以下是您提到的几种选择器类型的详细解释:

  1. CSS属性选择器

    • 属性选择器允许您基于HTML元素的属性及其值来选择元素。
    • 常见属性选择器包括:
      • [attribute]:匹配任何带有指定属性的元素,不论属性值为何。
      • [attribute=value]:匹配属性值精确等于给定字符串的元素。
      • [attribute~=value]:匹配属性值是一个以空格分隔的单词列表,其中含有指定值的元素。
      • [attribute^=value]:匹配属性值以指定字符串开头的元素。
      • [attribute$=value]:匹配属性值以指定字符串结尾的元素。
      • [attribute*=value]:匹配属性值包含指定字符串的元素。
      • [attribute|=value]:匹配属性值要么精确等于指定字符串,要么以指定字符串紧接着连字符 - 开始的元素。
  2. 关系选择器

    • 关系选择器用来根据元素之间的上下文关系来选择元素。
      • E F:选择作为E元素后代的所有F元素。
      • E > F:选择作为E元素直接子元素的所有F元素。
      • E + F:选择紧接在E元素之后的第一个同级F元素。
      • E ~ F:选择E元素之后的所有同级F元素。
  3. 结构化伪类选择器

    • 结构性伪类根据元素在DOM树中的位置或结构来选择元素,不依赖于文档源顺序。
      • :root:匹配文档根元素,在HTML文档中通常是 <html>
      • :first-child:匹配父元素的第一个子元素。
      • :last-child:匹配父元素的最后一个子元素。
      • :only-child:匹配没有其他同胞元素的元素。
      • :nth-child(n):匹配其父元素的第n个子元素。
      • :nth-last-child(n):匹配其父元素倒数第n个子元素。
      • :empty:匹配没有子元素(包括文本节点)的元素。
  4. 状态化伪类选择器

    • 这些选择器用于基于用户界面状态(如鼠标悬停、焦点状态、是否被选中等)来选择元素。
      • :hover:匹配鼠标指针位于其上方的元素。
      • :focus:匹配获得焦点(比如通过键盘导航)的元素。
      • :active:匹配正在被用户激活(通常是指按下鼠标按钮还未释放)的元素。
      • :visited:匹配用户已访问过的链接(仅适用于 <a> 元素)。
      • :link:匹配未被用户访问过的链接(也仅适用于 <a> 元素)。
      • :target:匹配URL指向的ID相同的元素。
  5. 伪元素选择器

    • 伪元素不是真正的DOM元素,而是可以通过CSS创建虚拟内容或样式化某些特殊部分。
      • ::before:在元素的实际内容之前插入内容,通常配合 content属性一起使用。
      • ::after:在元素的实际内容之后插入内容,同样需要配合 content属性。
      • ::first-letter:可以选择元素内文本的第一个字母。
      • ::first-line:可以选择元素内文本的第一行。
      • ::selection:可以选择用户高亮选择的部分。
      • ::placeholder:可以样式化input元素的占位符文本。

请注意,伪元素选择器在CSS3中建议使用双冒号 (::),尽管单冒号 (:before, :after) 在许多浏览器中仍然兼容,但为了规范和未来兼容性,推荐使用双冒号形式。

以下是一些不同类型CSS选择器的实例:

属性选择器实例:

/* 匹配所有带有href属性的a元素 */
a[href] {
  color: blue;
}

/* 匹配title属性值为"important"的所有元素 */
*[title="important"] {
  font-weight: bold;
}

/* 匹配class属性中包含"highlight"的元素 */
[class*="highlight"] {
  background-color: yellow;
}

/* 匹配id属性以"header-"开始的元素 */
[id^="header-"] {
  border-top: 2px solid black;
}

/* 匹配src属性值以".jpg"结尾的img元素 */
img[src$=".jpg"] {
  max-width: 100%;
}

关系选择器实例:

/* 选择作为div元素后代的所有p元素 */
div p {
  margin-bottom: 1em;
}

/* 选择作为任意元素直接子元素的strong元素 */
* > strong {
  font-weight: bolder;
}

/* 选择紧跟在一个h2元素后的第一个同级p元素 */
h2 + p {
  text-indent: 1em;
}

/* 选择紧随在某个li元素之后的所有同级li元素 */
li ~ li {
  margin-top: 0.5em;
}

结构化伪类选择器实例:

/* 选择文档根元素下的所有body元素 */
:root body {
  background-color: white;
}

/* 选择作为父元素的第一个子元素的所有p */
p:first-child {
  font-weight: bold;
}

/* 选择作为父元素最后一个子元素的a元素 */
a:last-child {
  text-decoration: underline;
}

/* 选择没有同胞元素的li */
li:only-child {
  list-style-type: none;
}

/* 选择每个ul下的第偶数个li */
ul li:nth-child(even) {
  background-color: lightgray;
}

状态化伪类选择器实例:

/* 当鼠标悬停在链接上时改变其颜色 */
a:hover {
  color: red;
}

/* 当输入框获得焦点时边框变粗 */
input:focus {
  border: 2px solid blue;
}

/* 已访问过的链接颜色变淡 */
a:visited {
  color: purple;
}

/* 为目标锚点添加背景色 */
:target {
  background-color: yellow;
}

伪元素选择器实例:

/* 在每个段落前插入引号 */
p::before {
  content: open-quote;
}

/* 在每个段落后添加省略号 */
p::after {
  content: "…";
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* 高亮用户选择的文本 */
::selection {
  background-color: lightblue;
  color: white;
}

/* 样式化input元素的placeholder文本 */
input::placeholder {
  color: gray;
  opacity: 0.8;
}

评论