博客列表 >CSS选择器(基本+上下文+伪类)

CSS选择器(基本+上下文+伪类)

茂林
茂林原创
2023年02月12日 18:24:32361浏览

选择器

概念:CSS 选择器规定了 CSS 规则会被应用到哪些元素上。
分类:

  • 基本选择器
  • 上下文选择器
  • 伪类选择器
    1. 结构伪类选择器
    2. 状态伪类选择器

一、基本选择器

根据元素名称与特征匹配应用到元素
标签:tag
属性:[attr = value]
id与class 是高频属性,有专用语法糖
1 标签和属性选择器应用

  1. <h1>Hello World</h1>
  2. <h2>Hello html</h2>
  3. <em>css 基本选择器</em>
  1. <!-- 1.1 tag 标签选择器 -->
  2. <!--将标签名称当作选择器使用 -->
  3. h1 {
  4. background-color: seagreen;
  5. }
  6. h2,
  7. em {
  8. color: blue;
  9. }

效果:
tag selector

  1. <!--1.2 属性选择器:`[attr = value]` -->
  2. <ul class="lists">
  3. <li class="one">选择器1</li>
  4. <li class="two">选择器2</li>
  5. <li class="three">选择器3</li>
  6. <li class="four">选择器4</li>
  7. <li class="five">选择器5</li>
  8. </ul>
  1. /* ul > li.three {
  2. color: aqua;
  3. } */
  4. /* li.three ===li[class="three"] */
  5. ul > li[class="three"] {
  6. color: red;
  7. }

效果:
selector attr

二、上下文选择器

概念:根据元素位置与层级匹配元素
分类:
1 父子: >
2 后代: 空格
3 兄弟: +
4 同级: ~
注意:一定要有查询的起点;比如以某个类开始,就可以查询该类下面的元素。
实例1 1 父子: >

  1. <ul class="items">
  2. <li class="it1">上下文选择器2</li>
  3. <li class="it2">上下文选择器3</li>
  4. <li class="it3">上下文选择器4</li>
  5. <li class="it4">上下文选择器1</li>
  6. <li class="it5">上下文选择器5</li>
  7. <li class="it6">上下文选择器6</li>
  8. </ul>
  9. <ul class="lists">
  10. <li class="one">选择器1</li>
  11. <li class="two">选择器2</li>
  12. <li class="three">选择器3</li>
  13. <li class="four">选择器4</li>
  14. <li class="five">选择器5</li>
  15. </ul>
  1. /* 1.父子选择器 */
  2. /* 将items类下面所有li加上边框和背景色 */
  3. ul.items > li {
  4. width: 150px;
  5. /* border: 1px solid red; */
  6. margin-top: 2px;
  7. background-color: lightblue;
  8. }
  9. /* 第三个背景色改绿色 */
  10. .lists > li.three {
  11. width: 150px;
  12. /* border: 2px solid blue; */
  13. background-color: seagreen;
  14. /* color: blue; */
  15. }

效果:
selector-content

实例2 后代: 空格

  1. <!-- 2 后代 空格 -->
  2. <ul class="items">
  3. <li class="it">上下文选择器2</li>
  4. <li class="it">上下文选择器3</li>
  5. <li class="it">上下文选择器4</li>
  6. <li class="it">
  7. <ul class="lists">
  8. 上下文选择器1
  9. <li class="it">选择器1</li>
  10. <li class="it">选择器2</li>
  11. <li class="it">选择器3</li>
  12. <li class="it">选择器4</li>
  13. <li class="it">选择器5</li>
  14. </ul>
  15. </li>
  16. <li class="it">上下文选择器5</li>
  17. <li class="it">上下文选择器6</li>
  18. </ul>
  1. /* 2. 后代: `空格`
  2. 查询的起点是items类,下面所有it 类的标签 加上浅蓝色边框
  3. */
  4. .items .it {
  5. width: 150px;
  6. border: 1px solid lightblue;
  7. margin: 2px;
  8. }

效果:
上下文选择器-后代

3 兄弟: +
邻接兄弟选择器(+)用来选中恰好处于另一个在继承关系上同级的元素旁边的物件。

  1. <ul class="items">
  2. <li class="it">上下文选择器1</li>
  3. <li class="it">上下文选择器2</li>
  4. <li class="it">上下文选择器3</li>
  5. <li class="it five">上下文选择器4</li>
  6. <li class="it">上下文选择器5</li>
  7. <li class="it">上下文选择器6</li>
  8. </ul>
  1. /* 3. 兄弟: `+`
  2. 定位结果查询其兄弟标签元素
  3. 通过 items>.it.five 类定位到下个li标签元素
  4. 上下文选择器5
  5. .items > .it.five + li === .items > .it.five + *
  6. * 星号可以匹配任意元素
  7. */
  8. .items > .it.five + * {
  9. width: 150px;
  10. border: 1px solid lightblue;
  11. margin: 2px;
  12. background-color: violet;
  13. }

效果:
brother
4 同级: ~
定位到元素.items > .it.five,查询其后面的所有元素

  1. <ul class="items">
  2. <li class="it">上下文选择器1</li>
  3. <li class="it">上下文选择器2</li>
  4. <li class="it">上下文选择器3</li>
  5. <li class="it five">上下文选择器4</li>
  6. <li class="it">上下文选择器5</li>
  7. <li class="it">上下文选择器6</li>
  8. </ul>
  1. .items > .it.five ~ * {
  2. width: 150px;
  3. border: 1px solid lightblue;
  4. margin: 2px;
  5. background-color: violet;
  6. }

效果:
同级

三、伪类选择器

概念:
伪类是添加到选择器的关键字,用于指定所选元素的特殊状态。例如,伪类 :hover 可以用于选择一个按钮,当用户的指针悬停在按钮上时,设置此按钮的样式。
伪类的使用说明
https://developer.mozilla.org/zh-CN/docs/Web/CSS/Pseudo-classes
分类:
1 结构伪类
2 状态伪类

结构伪类:常用的”结构伪类”,用于查询子元素

结构伪类的特点:
伪类选择器, 最常用的”结构伪类”,用于查询子元素
这与上下文选择器非常相似,必须设置一个查询起点,否则从html开始递归查询
与上下文选择器相比, 结构伪类,要简洁的多,除起点元素外,几乎不需要在子元素上添加多余属性
最常用的结构伪类:

  1. :nth-child(n):查询第n个子元素
  2. :first-child:查询第1个子元素,高频操作 是:nth-child(1)的语法糖
  3. nth-child(n + a):n代表
  4. :last-child:查询最后一个子元素,高频操作 是:nth-child(n)的语法糖,n代表最后一个子元素的序号。
  5. :nth-last-child()
  1. <ul class="items">
  2. <li>上下文选择器1</li>
  3. <li>上下文选择器2</li>
  4. <li>上下文选择器3</li>
  5. <li>上下文选择器4</li>
  6. <li>上下文选择器5</li>
  7. <li>上下文选择器6</li>
  8. </ul>

1 nth-child(n):用来查询任意一个子元素

1.1 查找第一个子元素

  1. /* 查找第一个子元素 */
  2. /* 查找第一个子元素 是最常用的,有语法糖*/
  3. /* .items > :nth-child(1) === .items > :first-child */
  4. /* .items > :nth-child(1) {
  5. width: 150px;
  6. background-color: lightblue;
  7. } */
  8. .items > :first-child {
  9. width: 150px;
  10. background-color: lightblue;
  11. }

效果:
伪类定位第一个子元素

1.2 查询最后一个子元素

  1. /* 查找最后一个子元素 ,常用有语法糖
  2. .items > :nth-child(6) === .items > :last-child
  3. */
  4. /* .items > :nth-child(6) {
  5. width: 150px;
  6. background-color: lightblue;
  7. } */
  8. .items > :last-child {
  9. width: 150px;
  10. background-color: lightblue;
  11. }

效果:
selector-fake-last
1.3 查询任意一个子元素

  1. /* 查询任意一个子元素,
  2. 只需要在:nth-child(n),将参数n改为查询子元素的序号 ,比如第3个子元素
  3. */
  4. .items > :nth-child(3) {
  5. width: 150px;
  6. background-color: lightblue;
  7. }

效果:

状态伪类: 常用于链接与表单元素

更多查询 MDN

  1. :hover: 鼠标悬停
  2. :enabled: 有效控件
  3. :disabled: 禁用控件
  4. :checked: 选中控件
  5. :required: 必选控件
  6. :focus: 焦点控件

状态伪类实现一个下拉菜单功能

  1. <div class="box">
  2. <label for="menu">项目类型</label>
  3. <input type="checkbox" name="xxxx" id="menu" />
  4. <ul>
  5. <li><a href="">项目1</a></li>
  6. <li><a href="">项目2</a></li>
  7. <li><a href="">项目3</a></li>
  8. <li><a href="">项目4</a></li>
  9. </ul>
  10. </div>
  1. 1. 将复选框的状态与下拉菜单进行绑定
  2. 2. 根据复选框的状态,确定下拉菜单是否显示?
  3. */
  4. /* 1. 初始化 */
  5. /* (1)隐藏复选框 */
  6. #menu {
  7. display: none;
  8. }
  9. /* (2)隐藏下拉菜单 */
  10. #menu + ul {
  11. display: none;
  12. }
  13. /* 更新复选框的状态: 选中或未选中 */
  14. #menu:checked + ul {
  15. display: block;
  16. }
  17. .box {
  18. display: inline-grid;
  19. position: relative;
  20. color: white;
  21. }
  22. /* 下拉菜单名的样式 */
  23. .box label {
  24. background-color: lightblue;
  25. padding: 5px 10px;
  26. text-align: center;
  27. }
  28. .box label:hover {
  29. cursor: pointer;
  30. }
  31. .box li {
  32. list-style: none;
  33. }
  34. .box li a {
  35. text-decoration: none;
  36. color: #444;
  37. font-size: 13px;
  38. }
  39. .box li a:hover {
  40. color: orangered;
  41. font-weight: bolder;
  42. background-color: lightblue;
  43. }
  44. .box ul {
  45. margin: 0;
  46. padding: 10px 0;
  47. padding-left: 10px;
  48. border: 1px solid #aaa;
  49. box-shadow: 3px 3px 3px #aaa;
  50. text-align: center;
  51. }

效果:
menu

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议