CSS 选择器

CSS 选择器

CSS 基本选择器及其扩展

CSS 基本选择器

  1. 通配符选择器 *
  2. 元素选择器 使用标签的名称
  3. 类选择器 使用 . 进行匹配
  4. ID 选择器 使用 # 进行匹配
  5. 后代选择器 使用空格进行匹配
>代码案例

```html
<style>
    * {   /* 通配符选择器 */
        margin: 0;
        padding: 0;
    }

    p { /* 元素选择器 */
        color: pink;
    }

    div {  /* 元素选择器 */ 
        width: 100px;
        height: 100px;
    }

    #test-id{  /* ID选择器 */
        font-size:24px;
    }

    .test-class{ /* 类选择器 */
        color:red;
    }

    .test-class p{  /* 后代选择器 */
        color:pink;
    }

</style>

<body>
    <div id="test-id" class="test-class">
        这是一个 div 块级元素
        <p>这是一个p标签</p>
    </div>
</body>

```

CSS 扩展选择器

  1. 直接后代选择器 使用 > 匹配

  2. 相邻兄弟选择器 使用 + 匹配

  3. 通用兄弟选择器 使用 ~ 匹配

  4. 选择器分组 使用 , 分组

    代码案例

    <style>
        .container>div {  /* 直接后代选择器 */
            border: purple 1px solid;
        }
    
        .div1+p { /* 相邻兄弟选择器 */
            color: pink;
        }
    
        .div1~p { /* 通用兄弟选择器 */
            border: springgreen 1px solid;
        }
    
        .test1,
        .test2,
        .test3 {  /* 选择器分组 */ 
            font-size: 50px;
            color: yellowgreen;
        }
    </style>
    
    <body>
        <div class="container">
            <div class="div1">1</div>
            <p>p1相邻兄弟</p>
            <div>
                div2
                <div>div2-1</div>
            </div>
            <div>3</div>
            <p>p2通用兄弟</p>
            <div class="test1">4</div>
            <div class="test2">5</div>
            <div class="test3">6</div>
            <div>7</div>
        </div>
    </body>
    
    

属性选择器

存在和值选择器

  1. [attr] 该选择器选择包含 arrt 属性的所有元素,不论 attr 的值如何。

  2. [attr=val] 该选择器仅选择 attr 属性被赋值为 val 的所有元素。

  3. [attr~=val] 表示带有 attr 命名的属性的元素,并且该属性是一个以空格作为分割的值列表,其中至少包含一个值为 val。

    代码案例

    <style>
        div[name] {  /* [attr] */
            background: dodgerblue;
        }
    
        div[name="dalaomao"] { /* [attr=val] */
            border: 1px solid pink;
        }
    
        div[name~="test"] {/* [attr~=val] */
            color: yellowgreen;
        }
    </style>
    
    <body>
        <div class="container">
            <div name="dalaomao">带name属性的div</div>
            <div name="test xss">测试2的div</div>
        </div>
    </body>
    

子串值属性选择器

  1. [attr|=val] 选择 attr 属性值为 val(包含val),或者val-开头的元素。

  2. [attr^=val] 选择 attr 属性值以 val(包含 val) 开头的元素。

  3. [attr$=val] 选择 attr 属性值以 val(包含 val) 结尾的元素。

  4. [attr*=val] 选择 attr 属性值中包含字符串 val 的元素。

    代码案例

    <style>
        ul>li[class|="atguigu"] {  /* [attr|=val] */
            border: 1px solid;
        }
    
        ul>li[class^="atguigu"] {/* [attr^=val] */
            border-color: yellowgreen;
        }
    
        ul>li[class$="guigu"] {/* [attr$=val] */
            background: deeppink;
        }
    
        ul>li[class*="-"]{/* [attr*=val] */
            background: deepskyblue;
        }
    </style>
    
    <body>
        <ul>
            <li class="atguigu">atguigu</li>
            <li class="atguigu-1">atguigu-1</li>
            <li class="atguigu-2">atguigu-2</li>
            <li class="atguigu-3">atguigu-3</li>
            <li class="atguigu-4">atguigu-4</li>
            <li class="guigu">guigu</li>
            <li class="guigu1">guigu1</li>
            <li class="guigu2">guigu2</li>
        </ul>
    </body>
    

伪类与伪元素选择器

链接伪类

以下三个伪类仅可以作用于 "链接" 上,故叫 “链接伪类”,又叫“锚点伪类”.

  1. :link 表示作为超链接,并指向一个未访问地址的所有锚。

  2. :visited 表示作为超链接,并指向一个已访问地址的所有锚。

  3. :target 表示一个特殊元素,它的 ID 是URI 的片段标识符。

    代码案例

    <style>
        /* link & visited 使用方法 */
        .container a:link {  /* :link */
            color: pink;
        }
    
        .container a:visited { /* :visited */
            color: green;
        }
    </style>
    
    <body>
        <div class="container">
            <a href="#">Click me.</a>
        </div>
    </body>
    

    target 面试题(用CSS实现选项卡)

    <style>
        * {
            padding: 0;
            margin: 0;
        }
    
        a {
            text-decoration: none;
            color: deeppink;
        }
    
        div {
            width: 200px;
            height: 200px;
            background: pink;
            display: none;
            font: 50px/200px "Copperplate";
        }
    
        :target{
            display: block;
        }
    
    </style>
    <body>
        <a href="#div1">div1</a>
        <a href="#div2">div2</a>
        <a href="#div3">div3</a>
        <div id="div1">DIV1</div>
        <div id="div2">DIV2</div>
        <div id="div3">DIV3</div>
    </body>
    

动态伪类

  1. :hover 表示鼠标悬浮到元素上时。

  2. :active 表示匹配被用户激活的元素(鼠标按下未抬起时)。

    代码案例

     <style>
         .container a:hover {  /* :hover */
             color: deeppink;
         }
    
         .container a:active {/* :active */
             color: deepskyblue;
         }
     </style>
    
     <body>
         <div class="container">
             <a href="#">Click me.</a>
         </div>
     </body>
    
    

表单伪类

  1. :enabled 匹配可编辑的表单

  2. :disabled 匹配被禁用的表单

  3. :checked 匹配被选中的表单

  4. :focus 匹配获取焦点的表单

    代码案例

     <style>
         .container input:enabled {  /* 可编辑的表单 背景色改为 粉色 */
             background: pink;
         }
    
         .container input:disabled { /* 禁用的表单 背景色改为 绿色 */
             background: green;
         }
    
         .container input:focus {  /* 表单获取焦点时背景颜色改为 深粉色 */
             background: deeppink;
         }
     </style>
    
     <body>
         <div class="container">
             <input type="text">
             <input type="text" disabled>
         </div>
     </body>
    
    

    自定义单选按钮案例

     <style>
         * {
             margin: 0;
             padding: 0;
         }
    
         label {
             float: left;
             width: 100px;
             height: 100px;
             border: 1px solid;
             border-radius: 50%;
             position: relative;
         }
    
         input {
             position: absolute;
             top: -50px;
             left: -50px;
             display: none;
         }
    
         span {
             position: absolute;
             border-radius: 50%;
             top: 0;
             left: 0;
             bottom: 0;
             right: 0;
         }
    
         input:checked+span {
             background: pink;
         }
     </style>
    
     <body>
         <label>
             <input type="radio" name="test" checked>
             <span></span>
         </label>
         <label>
             <input type="radio" name="test">
             <span></span>
         </label>
         <label>
             <input type="radio" name="test">
             <span></span>
         </label>
     </body>
    
    

结构性伪类

注意:

① index 的值从 1 开始计数.

② index 可以为变量 n (只能是 n)

  1. :nth-child(idnex) 系列

    :first-child

    :last-child

    nth-last-child(idnex)

    only-child 相当于 :first-child:last-child 或者 :nth-child(index):nth-last-child(index)

    代码案例

    <style>
        /*
            获取 ul 下边的所有子元素,并且匹配到第一个子元素,并且 这个子元素必须是 li.
        */
    
        /* 第一个是 li标签 的时候生效 */
        ul>li:nth-child(1) {
            color: palegreen;
        }
    
        /* 第一个标签是 p标签 的时候生效 */
        ul>p:first-child {
            color: deeppink;
        }
    
        /* 最后一个标签是 li标签 的时候生效 */
        ul>li:last-child {
            color: green;
        }
    
        /* 倒数第二个标签是 li标签 的时候生效 */
        ul>li:nth-last-child(2) {
            color: deepskyblue;
        }
    
        /* 只有一个 p标签 的时候生效 */
        ul>p:only-child {
            color: violet;
        }
    </style>
    
    <body>
        <ul>
            <p>我是 ul 的第一个 p 儿子</p>
            <li>1</li>
            <p>我是 ul 的第二个 p 儿子</p>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <a href="#">我是a标签</a>
            <li>5</li>
            <li>6</li>
            <li>7</li>
            <li>8</li>
        </ul>
    </body>
    
  2. :nth-of-type(index) 系列

    :first-of-type

    :last-of-type

    :nth-last-type(index)

    only-of-type

    代码案例

    <style>
        /* 我要选择的是第二个 li标签 */
        ul>li:nth-of-type(2) {
            color: deeppink;
        }
    
        /* 我要选择的是倒数第二个 li标签 */
        ul>li:nth-last-of-type(2) {
            color: blueviolet;
        }
    
        /* 我要选择的是第一个 li标签 */
        ul>li:first-of-type {
            color: greenyellow;
        }
    
        /* 我要选择的是最后一个 li标签 */
        ul>li:last-child {
            color: hotpink;
        }
    
       
        /* 我要选择的是仅有的一个 a标签 */
        ul>a:only-of-type {
            color: yellowgreen;
        }
    </style>
    
    <body>
        <ul>
            <p>我就是一个 p1 .</p>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
            <a href="#">我是一个 a标签 </a>
            <li>7</li>
            <li>8</li>
            <p>我就是一个 p2 .</p>
        </ul>
    </body>
    
  3. :not

  4. :empty 内容必须是空的,有空格都不行,有 attr 没关系。

伪元素选择器

未完待续.

CSS 声明的优先级

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • 一、CSS选择器常见的有几种? 基本选择器 通配选择器~选择文档中所有的html元素,用一个*表示 元素选择器~选...
    dengpan阅读 959评论 0 3
  • 转载自牢记31种CSS选择器用法 1 * 星号选择器用于选取页面中的所有元素,可用于快速清除所有元素的 margi...
    Icestains阅读 1,220评论 0 1
  • 一、CSS选择器 关于CSS选择器,首先请看这里:CSS 选择器参考手册 通过以上,我们可以将CSS选择器分为以下...
    fehysunny阅读 2,236评论 0 2
  • 基本选择器 * 通用选择器,匹配任何元素 E 标签选择器,匹配所有使用E标签的元素 .class class选择器...
    疯狂的潜水员阅读 604评论 0 2
  • id与class的使用场景 id选择器,匹配特定id的元素类选择器,匹配class包含(不是等于)特定类的元素id...
    姚小帅阅读 311评论 0 0