• 学习css 伪类:has


    学习抖音: @渡一前端提薪课

    首先我们看下:has(selector)是什么

    匹配包含(相对于 selector 的 :scope)指定选择器的元素。可以认为 selector 的前面有一个看不见的 :scope 伪类。它的强大之处是,可以实现父选择器和前面兄弟选择器的功能。支持所有的 CSS 选择符。

    我们举个例子:

    css

    1. .box1:has(p) {
    2. color: red;
    3. }
    4. .box1:has(span) {
    5. color: blue;
    6. }
    7. .box1:has(a, div) {
    8. color: greenyellow;
    9. }

    html

    1. <body>
    2. <div class="box1">
    3. <p>pppp>
    4. div>
    5. <div class="box1">
    6. <span>spanspan>
    7. div>
    8. <div class="box1">
    9. <a>有pa>
    10. div>
    11. <div class="box1">
    12. <div>有divdiv>
    13. div>
    14. body>

    结果,.box1:has(p) 就是包含 p 标签的.box1 元素。.box1:has(span)就是包含span的元素,.box1:has(a, div) 就是 包换 a 和包含div的元素

    进阶

    知道这个原理后我们在进阶一下,看看 子的伪类可不可以用。

    css

    1. .box1:has(.red:hover) {
    2. color: red;
    3. }
    4. .box1:has(.blue:hover) {
    5. color: blue;
    6. }
    7. .box1:has(.yellow:hover) {
    8. color: yellow;
    9. }

    html

    1. <div class="box1">
    2. <div class="red">变红色div>
    3. <div class="blue">变蓝色div>
    4. <div class="yellow">变黄色div>
    5. div>

    结果:

    基于这个特效 我们做一个案例

    案例

    直接上代码

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <title>demo-2title>
    7. <style>
    8. * {
    9. padding: 0;
    10. margin: 0;
    11. }
    12. .container {
    13. width: 400px;
    14. height: 400px;
    15. border: 2px solid #999;
    16. position: absolute;
    17. top: 100px;
    18. left: 50%;
    19. transform: translateX(-50%);
    20. display: grid;
    21. transition: 0.5s;
    22. grid-template-columns: 1fr 1fr 1fr;
    23. grid-template-rows: 1fr 1fr 1fr;
    24. gap: 5px
    25. }
    26. .item:nth-of-type(1) {
    27. background: red;
    28. }
    29. .item:nth-of-type(2) {
    30. background: rgb(255, 208, 0);
    31. }
    32. .item:nth-of-type(3) {
    33. background: rgb(0, 255, 0);
    34. }
    35. .item:nth-of-type(4) {
    36. background: rgb(166, 255, 0);
    37. }
    38. .item:nth-of-type(5) {
    39. background: rgb(170, 88, 224);
    40. }
    41. .item:nth-of-type(6) {
    42. background: rgba(0, 238, 255, 0.726);
    43. }
    44. .item:nth-of-type(7) {
    45. background: rgb(255, 115, 0);
    46. }
    47. .item:nth-of-type(8) {
    48. background: rgb(86, 75, 241);
    49. }
    50. .item:nth-of-type(9) {
    51. background: rgb(255, 0, 149);
    52. }
    53. .container:has(.item:nth-of-type(1):hover) {
    54. grid-template-columns: 2fr 1fr 1fr;
    55. grid-template-rows: 2fr 1fr 1fr;
    56. }
    57. .container:has(.item:nth-of-type(2):hover) {
    58. grid-template-columns: 1fr 2fr 1fr;
    59. grid-template-rows: 2fr 1fr 1fr;
    60. }
    61. .container:has(.item:nth-of-type(3):hover) {
    62. grid-template-columns: 1fr 1fr 2fr;
    63. grid-template-rows: 2fr 1fr 1fr;
    64. }
    65. .container:has(.item:nth-of-type(4):hover) {
    66. grid-template-columns: 2fr 1fr 1fr;
    67. grid-template-rows: 1fr 2fr 1fr;
    68. }
    69. .container:has(.item:nth-of-type(5):hover) {
    70. grid-template-columns: 1fr 2fr 1fr;
    71. grid-template-rows: 1fr 2fr 1fr;
    72. }
    73. .container:has(.item:nth-of-type(6):hover) {
    74. grid-template-columns: 1fr 1fr 2fr;
    75. grid-template-rows: 1fr 2fr 1fr;
    76. }
    77. .container:has(.item:nth-of-type(7):hover) {
    78. grid-template-columns: 2fr 1fr 1fr;
    79. grid-template-rows: 1fr 1fr 2fr;
    80. }
    81. .container:has(.item:nth-of-type(8):hover) {
    82. grid-template-columns: 1fr 2fr 1fr;
    83. grid-template-rows: 1fr 1fr 2fr;
    84. }
    85. .container:has(.item:nth-of-type(9):hover) {
    86. grid-template-columns: 1fr 1fr 2fr;
    87. grid-template-rows: 1fr 1fr 2fr;
    88. }
    89. style>
    90. head>
    91. <body>
    92. <div class="container">
    93. <div class="item">div>
    94. <div class="item">div>
    95. <div class="item">div>
    96. <div class="item">div>
    97. <div class="item">div>
    98. <div class="item">div>
    99. <div class="item">div>
    100. <div class="item">div>
    101. <div class="item">div>
    102. div>
    103. body>
    104. <script>
    105. script>
    106. html>

    效果:

  • 相关阅读:
    lua torch 官方学习教程
    了解多媒体展厅弧幕投影系统收费构成,轻松制定预算
    WebSocket实现方式
    基于STM32单片机一氧化碳(CO)气体监控系统proteus仿真设计
    PaddlePaddle自然语言处理总结
    ESP8266制作的1.44寸TFT显示屏太空人天气时钟(st7735)(增加农历显示)(抄作业)
    NIO和BIO
    小侃设计模式(十四)-职责链模式
    C++ 类型转换
    群接龙拼团小程序开发
  • 原文地址:https://blog.csdn.net/weixin_43845059/article/details/133648896