CSS-复合选择器

复合选择器:

交集选择器:

代码:

选中同时符合多个条件的元素,有并且的含义(既…又…)

<head>
    <meta charset="UTF-8">
    <title>交集选择器</title>
    <style>
        .rich {
            color: gold;
        }
        .beauty {
            color: red;
        }
        /* p元素且类名为beauty */
        p.beauty {
            color: green;
        }
        /* .dream{
            color: orange;
        } */
        .rich.beauty {
            color: orange;
        }
    </style>
</head>
<body>
    <h2 class="rich">土豪张三</h2>
    <h2 class="beauty">明星李四</h2>
    <!-- <h2 class="dream">土豪明星王五</h2> -->
    <h2 class="rich beauty">土豪明星王五</h2>
    <hr>
    <!-- hr是水平线 -->
    <p class="beauty">小狗旺财</p>
    <p class="beauty">小猪佩奇</p>
</body>

有图有真相:

在这里插入图片描述

格式:

选择器1选择器2选择器3…选择器n { }
在这里插入图片描述

交集选择器注意点:

  1. 有标签名,标签名必须写在前面
  2. id选择器,理论上是可以作为交集的条件,但是实际应用几乎不用(#)
  3. 交集选择器中不可能出现两个元素选择器,不可能即是p元素又是span元素
  4. 用得最多的交集选择器是:元素选择器配合类名选择器,例如 p.beauty

并集选择器:

代码:

<head>
    <meta charset="UTF-8">
    <title>并集选择器</title>
    <style>
        .rich {
            color: gold;
        }
        .beauty {
            color: red;
        }
        .dpg {
            color: blue;
        }
        .pig {
            color: green;
        }
        .rich,
        .beauty,
        .dog,
        .pig {
            font-size: 40px;
            background-color:grey;
            width: 180px;
        }
    </style>
</head>

<body>
    <h2 class="rich">土豪张三</h2>
    <h2 class="beauty">明星李四</h2>
    <h2>破产王五(不加任何样式)</h2>
    <hr>
    <p class="dog">小狗旺财</p>
    <p class="pig">小猪佩奇</p>
</body>

有图有真相:

在这里插入图片描述

格式:

作用是选中多个选择器对应的元素,并集就是或者的含义(要么…要么…)
选择器1,选择器2,选择器3,…选择器n { }
在这里插入图片描述

并集选择器注意点:

  1. 并集选择器,我们一般竖着写
  2. 任何形式的选择器,都可以作为并集选择器的一部分
  3. 并集选择器通常用于集体声明,可以缩小样式表体积

后代选择器:

代码:

<head>
    <meta charset="UTF-8">
    <title>后代选择器</title>
    <style>
        ul li {
            color: brown;
        }
        ol li {
            color: blue;
        }
        ul li a {
            color: chocolate;
        }
        ol a {
            color: grey;
        }
        .subject li.front-end {
            color: green;
        }
        .subject div.front-end {
            color: red;
        }
    </style>
</head>
<body>
    <ul>
        <li>抽烟</li>
        <li>喝酒</li>
        <li>
            <a href="#">烫头</a>
        </li>
        <div>
            <li>踢球</li>
        </div>
    </ul>
    <hr>
    <ol>
        <li>张三</li>
        <li>李四</li>
        <li>
            <a href="#">王五</a>
        </li>
    </ol>
    <hr>
    <ol class="subject">
        <li class="front-end">前端</li>
        <div class="front-end">学好前端找到好工作!</div>
        <li>java</li>
        <li>大数据</li>
        <li>UI</li>
    </ol>
</body>

有图有真相:

在这里插入图片描述

格式:

选择器1 选择器2 选择器3…选择器n { }
(先写祖先,再写后代 空格可以理解为 什么中的什么)

后代选择器的注意点:

  1. 后代选择器最终选择的是后代不选中祖先
  2. 儿子、孙子、重孙子等都算是后代
  3. 结构一定要复合之前讲的HTML嵌套要求,例如不能在p标签里写h1-h6等

子代选择器:

代码:

<head>
    <meta charset="UTF-8">
    <title>子代选择器</title>
    <style>
       div>a {
           color: red;
       }
       div>p>a {
           color: skyblue;
       }
       .foot>a {
           color: gold;
       }
    </style>
</head>

<body>
   <div>
       <a href="#">张三</a>
       <a href="#">李四</a>
       <a href="#">王五</a>
       <p>
           <a href="#">赵六</a>
           <div class="foot">
               <a href="#">孙七</a>
           </div>
       </p>
   </div>
</body>

有图有真相:
在这里插入图片描述

格式:

选择器1>选择器2>选择器3…选择器n { }
选择器之间用 > 隔开,可以理解为:“xxx的子代”,就是儿子的意思,选择器1234…n可以是之前学的任何一种选择器

子代选择器的注意点:

  1. 子代选择器最终选的是子代不是它的父级
  2. 子、孙子、重孙子、重重孙子…统称为后代,子就是指儿子
    在这里插入图片描述

兄弟选择器:

代码:

<head>
    <meta charset="UTF-8">
    <title>兄弟选择器</title>
    <style>
        /* 选中div后紧紧相邻的兄弟p元素 -相邻兄弟选择器*/
        /* div+p {
          color: red;
           } */
        /* 选中div后所有的的兄弟p元素 -通用兄弟选择器*/
        
        div~p {
            color: blue;
        }
        
        li+li {
            color: gold;
        }
    </style>
</head>

<body>
    <p>测试</p>
    <div>学新知识</div>
    <p>前端</p>
    <p>Java</p>
    <p>大数据</p>
    <p>UI</p>
    <ul>
        <li>主页</li>
        <li>秒杀</li>
        <li>订单</li>
        <li>我的</li>
    </ul>
</body>

有图有真相:

在这里插入图片描述

格式:

相邻兄弟选择器:

选中指定元素后符合条件的相邻兄弟元素
选择器1+选择器2 { }
就是紧挨着他的下一个,简单说就是 睡在我下铺的兄弟
在这里插入图片描述

通用选择器:

选中指定元素后符合条件的所有兄弟元素,简单记:睡在我下铺的所有兄弟。
选择器1~选择器2 { }
在这里插入图片描述

注意:

这里的选择器可以是我们学过的所有选择器

属性选择器:

代码:

<head>
    <meta charset="UTF-8">
    <title>属性选择器</title>
    <style>
        /* 第一种写法:选中具有title属性的元素 */
        /* [title] {
            color: red;
        } */
        /* 第二种写法:选中具有title属性,且属性值为csdn1的元素*/
        /* [title="csdn1"] {
            color: red;
        } */
        /* 第三种写法:选中具有title属性,且属性值以字母a开头的元素*/
        /* [title^="a"] {
            color: red;
        } */
        /* 第四种写法:选中具有title属性,且属性值以字母t结尾的元素*/
        /* [title$="t"] {
            color: red;
        } */
        /* 第五种写法:选中具有title属性,且属性值包含字母n的元素*/
        /* [title*="n"] {
            color: red;
        } */
    </style>
</head>
<body>
    <div title="csdn1">一杯热白开</div>
    <div title="csdn2">两杯热白开</div>
    <div title="ant">三杯热白开</div>
    <div title="aant">四杯热白开</div>
</body>

格式:

在这里插入图片描述

伪选择器:

引出伪类概念:

<head>
    <meta charset="UTF-8">
    <title>伪类选择器概念</title>
    <style>
        /* 什么是伪类? 很像类,但不是类(class),是元素特殊状态的一种描述 */
        /* 选中的是没有访问过的a元素 */
        a:link {
            color:gold;
        }
        /* 选中的是访问过的a元素 */
        a:visited {
            color:grey;
        }
    </style>
</head>
<body>
    <a href="https://www.baidu.com">去百度</a>
    <a href="https://www.jd.com">去京东</a>
</body>

有图有真相:

访问过的变灰色,没访问的是金色

动态伪类:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>伪类选择器-动态选择器</title>
    <style>
        /* 有顺序不能打乱 lvha(其中lv是a元素特有的) */
        /* 选中的是没有访问过的a元素 */
        
        a:link {
            color: gold;
        }
        /* 选中的是访问过的a元素 */
        
        a:visited {
            color: grey;
        }
        /* 选中的是鼠标悬浮状态的a元素 */
        
        a:hover {
            color: skyblue;
        }
        /* 选中的是激活状态的a元素 */
        
        a:active {
            color: green;
        }
        /* 选中的是鼠标悬浮的span元素 */
        
        span:hover {
            color: green;
        }
        /* 选中的是激活的span元素 */
        
        span:active {
            color: red;
        }
        /* 选中获取焦点的元素,只适用于表单类元素 */
        
        input:focus,
        select:focus {
            color: palegreen;
            background-color: lightslategrey;
        }
    </style>
</head>

<body>
    <a href="https://www.baidu.com">去百度</a>
    <a href="https://www.jd.com">去京东</a>
    <span>一杯热白开</span>
    <br>
    <input type="text">
    <br>
    <select>
        <option value="beijing">北京</option>
        <option value="shanxi">山西</option>
        <option value="hunan">湖南</option>
    </select>
</body>

</html>
动态伪类注意点:
  1. :link 超链接未被访问的状态
  2. :visited 超链接访问过的状态
  3. :hover 鼠标悬停在元素上的状态
  4. :active 元素激活的状态
    激活就是按下鼠标但是没松开
  5. 郡守lvha顺序 即 link、visited、hover、active
  6. :focus 获取焦点的元素 ,只有表单类元素才能使用:focus伪类。当用户点击元素、触摸元素或通过键盘的tab键等方式选择元素时就是获得焦点

结构伪类:(重点看2)

结构伪类1:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>伪类选择器-结构伪类1</title>
    <style>
        /* 选中的是div的第一个儿子p元素(按照所有兄弟计算的,下面一样) ---结构1  */
        /* div>p是子代选择器 */
        /* div>p:first-child{
            color: red;
        } */
        /* 选中的是div的第一个儿子p元素 ---结构2  */
        /* div>p:first-child{
            color: red;
        } */
        /* 选中的是div的后代p元素且p的父亲是谁无所谓,但p必须是其父亲的第一个儿子---结构3  */
        /* div p是后代选择器  */
        /* div p:first-child {
            color: red;
        } */
        /* 选中的是p元素且p的父亲是谁无所谓,但p必须是其父亲的第一个儿子---结构3  */
        
        p:first-child {
            color: red;
        }
    </style>
</head>

<body>
    <!-- 结构1 -->
    <!-- <div>
        <p>张三:99分</p>
        <p>李四:95分</p>
        <p>王五:86分</p>
        <p>赵六:73分</p>
    </div> -->
    <!-- 结构2 -->
    <!-- <div>
        <span>张三:99分</span>
        <p>李四:95分</p>
        <p>王五:86分</p>
        <p>赵六:73分</p>
    </div> -->
    <!-- 结构3 -->
    <p>测试1</p>
    <div>
        <p>测试2</p>
        <marquee>
            <p>测试3</p>
            <p>张三:99分</p>
        </marquee>
        <p>李四:95分</p>
        <p>王五:86分</p>
        <p>赵六:73分</p>
    </div>
</body>

</html>
***重点记·结构伪类2:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>伪类选择器-结构伪类2</title>
    <style>
        /* 选中的是div的第一个儿子p元素(按照所有兄弟计算的) ---结构1  */
        /* div>p是子代选择器 */
        /* div>p:first-child {
            color: red;
        } */
        /* 选中的是div的第n个儿子p元素(按照所有兄弟计算的) ---结构1  */
        /* div>p:nth-child(3) {
            color: red;
        } */
        /* 选中的是div的第n个儿子p元素(按照所有兄弟计算的) ---结构2  */
        /* 2n/even是选中偶数,2n+1/odd是选中奇数,-n+5是前五位(an+b的形式) */
        /* div>p:nth-child(even) {
            color: red;
        } */
        /* 选中的是div的第一个儿子p元素(按照所有同类型兄弟计算的) ---结构3 */
        /* div>p:first-of-type{
            color: red;
        } */
        /* 选中的是div的最后一个儿子p元素(按照所有兄弟计算的) ---结构3 */
        /* div>p:last-child{
            color: red;
        } */
        /* 选中的是div的第n个儿子p元素(按照所有同类型兄弟计算的) ---结构3 */
        
        div>p:nth-of-type(3) {
            color: red;
        }
    </style>
</head>

<body>
    <!-- 结构1 -->
    <!-- <div>
        <p>张三:99分</p>
        <p>李四:95分</p>
        <p>王五:86分</p>
        <p>赵六:73分</p>
        <p>孙七:68分</p>
        <p>老八:55分</p>
    </div> -->
    <!-- 结构2 -->
    <!-- <div>
        <p>第1个</p>
        <p>第2个</p>
        <p>第3个</p>
        <p>第4个</p>
        <p>第5个</p>
        <p>第6个</p>
        <p>第7个</p>
        <p>第8个</p>
        <p>第9个</p>
        <p>第10个</p>
    </div> -->
    <!-- 结构3 -->
    <div>
        <span>测试</span>
        <p>张三:99分</p>
        <p>李四:95分</p>
        <p>王五:86分</p>
        <span>测试3</span>
        <p>赵六:73分</p>
        <p>孙七:68分</p>
        <p>老八:55分</p>
        <span>测试2</span>
    </div>
</body>

</html>
常用:****

在这里插入图片描述

结构伪类3:

了解即可:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>伪类选择器-结构伪类3</title>
    <style>
        /* 选中div中倒数第n个的儿子p元素(按照所有兄弟) ---看结构1 */
        /* div>p:nth-last-child(3){
          color: red;
        } */
        /* 选中div中倒数第n个的儿子p元素(按照所有同类型兄弟) ---看结构1 */
        /* div>p:nth-last-of-type(2){
          color: red;
        } */
        /* 选中的是没有兄弟的span元素 ---看结构2 */
        /* span:only-child{
            color: red;
        } */
        /* 选中的是没有同类型兄弟的span元素 ---看结构2 */
        /* span:only-of-type{
            color: red;
        } */
        /* 选中的是根元素 */
        /* :root {
            background-color: skyblue;
        } */
        /* 选中的是没有内容的div元素 */
        div:empty {
            width: 100px;
            height: 100px;
            background-color: red;
        }
    </style>
</head>

<body>
    <!-- 结构1 -->
    <!-- <div>
        <span>测试</span>
        <p>张三:99分</p>
        <p>李四:95分</p>
        <p>王五:86分</p>
        <p>赵六:73分</p>
        <p>孙七:68分</p>
        <p>老八:55分</p>
        <span>测试2</span>
    </div> -->
    <!-- 结构2 -->
    <!-- <div>
        <span>测试1</span>
    </div>
    <div>
        <span>测试2</span>
        <p>张三:99分</p>
        <p>李四:95分</p>
        <p>王五:86分</p>
        <p>赵六:73分</p>
        <p>孙七:68分</p>
        <p>老八:55分</p>
    </div> -->
    <!-- 结构3 -->
    <div></div>
</body>

</html>

在这里插入图片描述

否定伪类:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>伪类选择器-否定伪类</title>
    <style>
        /* 选中的是div的儿子p元素,但是排除类名为fail的元素 */
        /* div>p:not(.fail) {
            color: red;
        } */
        /* 选中的是div的儿子p元素,但是排除title属性值一"你要加油"开头的元素 */
        /* div>p:not([title^="你要加油"]) {
            color: red;
        } */
        /* 选中的是div的儿子p元素,但排除第一个儿子p元素 */
        div>p:not(:first-child) {
            color: red;
        }
    </style>
</head>

<body>
    <div>
        <p>张三:99分</p>
        <p>李四:95分</p>
        <p>王五:86分</p>
        <p>赵六:73分</p>
        <p class="fail" title="你要加油啊!孙七">孙七:58分</p>
        <p class="fail" title="你要加油啊!老八">老八:55分</p>
    </div>
</body>

</html>
否定伪类结构:

:not(选择器) 排除满足括号中条件的元素

UI伪类:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>伪类选择器-UI伪类</title>
    <style>
        /* 选中的是勾选的复选框或单选按钮 */
        
        input:checked {
            width: 100px;
            height: 100px;
        }
        /* 选中的是被禁用的input元素 */
        
        input:disabled {
            background-color: grey;
        }
        /* 选中的是可用的input元素 */
        
        input:enabled {
            background-color: skyblue;
        }
    </style>
</head>

<body>
    <input type="checkbox">
    <input type="radio" name="gender">
    <input type="radio" name="gender">
    <input type="text">
    <input type="text" disabled>
</body>

</html>
  1. :checked被选中的复选框或单选按钮。
  2. :enable可用的表单元素(没有disabled属性)。
  3. :disabled 不可用的表单元素(有disabled 属性)。

目标伪类(了解即可):

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>伪类选择器-目标伪类</title>
    <style>
        div {
            background-color: grey;
            height: 300px;
        }
        
        div:target {
            background-color: gold;
        }
    </style>
</head>

<body>
    <a href="#one">去看第1个</a>
    <a href="#two">去看第2个</a>
    <a href="#three">去看第3个</a>
    <a href="#four">去看第4个</a>
    <a href="#five">去看第5个</a>
    <a href="#six">去看第6个</a>

    <div id="one">第1个</div><br>
    <div id="two">第2个</div><br>
    <div id="three">第3个</div><br>
    <div id="four">第4个</div><br>
    <div id="five">第5个</div><br>
    <div id="six">第6个</div>
</body>

</html>

:target 选中锚点指向的元素

语言伪类:

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>伪类选择器-语言伪类</title>
    <style>
       div:lang(en) {
           color: red;
       }
       :lang(zh-CN) {
           color: gold;
       }
    </style>
</head>

<body>
    <div>一杯热白开</div>
    <div lang="en">没事多喝白开水</div>
    <p>我学习前端,热爱前端</p>
    <span>你好!!</span>
</body>

</html>

:lang() 根据指定的语言元素(本质上是看lang属性的值)

伪元素选择器:

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>伪元素选择器</title>
    <style>
        /* 什么是伪元素? --很像元素,但不是元素(element),是元素中的一些特殊位置 */
        /* 选中的是div中的第一个文字 */
        div::first-letter {
            color: red;
            font-size: 40px;
        }
        /* 选中的是div中的第一行文字 */
        div::first-line {
            background-color: yellow;
        }
        /* 选中的是div中被鼠标选择的文字 */
        div::selection {
            background-color: greenyellow;
            color: dodgerblue;
        }
        /* 选中的是input元素中的提示文字 */
        input::placeholder {
            color: skyblue;
        }
        /* 选中的是p元素最开始的位置,随后创建一个子元素 */ 
        p::before {
            content: "¥";
        }
        /* 选中的是p元素最后的位置,随后创建一个子元素 */
        p::after {
            content: ".00";
        }
    </style>
</head>

<body>
    <div>Lorem ipsum dolor sit amet consectetur adipisicing elit. Accusantium asperiores perspiciatis ut sit autem vero laudantium, ipsum fugiat ex iste quaerat quas necessitatibus distinctio aperiam est odit dolores totam neque. Voluptates obcaecati illo,
        at veniam tempora culpa vitae, a architecto non repudiandae porro. Adipisci ducimus eos quisquam maiores omnis, fuga architecto porro, ut est iste ipsum, itaque inventore quam nostrum.</div>
    <br>
    <input type="text" placeholder="请输入你的用户名">
    <br>
    <p>199</p>
    <p>299</p>
    <p>399</p>
    <p>499</p>
</body>

</html>

作用:选中元素中的一些特殊位置

伪元素选择器常用伪元素:

  1. : :first-letter选中元素中的第一个文字。
  2. : :first-line选中元素中的第一行文字。
  3. : :selection选中被鼠标选中的内容。
  4. : : placeholder 选中输入框的提示文字。
  5. : : before在元素最开始的位置,创建一个子元素(必须用content 属性指定内容)。
  6. : :after在元素最后的位置,创建一个子元素(必须用content属性指定内容)。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值