当前位置: 首页 > article >正文

二、CSS

一、CSS基础 

        1、css简介

        CSS全称为:层叠样式表(Cascading Style Sheets)。
        CSS 也是一种标记语言,用于给HTML结构设计样式,例如:文字大小、颜色、元素宽高等等。

   简单理解:css可以美化HTML,让HTML更漂亮

   核心思想:HTML搭建结构,CSS添加样式,实现了,结构与样式的分离。

        

        2、css编写位置

        2.1 行内样式

                写在标签的 style 属性中,(又称:内联样式)。
                语法:

            <h1 style="color: greenyellow;font-size: 80px;">欢迎光临!</h1>

                注意点:
                1)style属性的值不能随便写,写要符合CSS语法规范,是 名:值; 的形式。
                2)行内样式表,只能控制当前标签的样式,对其他标签无效。

                存在的问题:
                书写繁琐、样式不能复用、并且没有体现:出结构与样式分离的思想,不推荐大量使用,只有对当前元素添加简单样式时,才偶尔使用。 

        2.2 内容样式

                写在html页面内部,将所有的CSS代码提取出来,单独放在 <style> 标签中。
                语法:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>内部样式</title>
    <style>
        h1{
            color: aqua;
            font-size: 80px;
        }
        h2{
            color: green;
            font-size: 60px;
        }
        p{
            color: blue;
            font-size: 40px;
        }
        img{
            width: 200px;
        }
    </style>
</head>
<body>
    <h1>欢迎光临!</h1>
    <h2>欢迎光临!</h2>
    <p>欢迎光临!</p>
    <img src="./imag/img8.jpg" alt="一个图片">
</body>
</html>

                注意点:

        1、<style> 标签理论上可以放在HTML文档的任何地方,但一般都放在<head>标签中。
        2、此种写法:样式可以复用、代码结构清晰。

                存在的问题:

        1、并没有直接实现:结构与样式完全分离。
        2、多个HTML页面无法复用样式。

        2.3 外部样式

                写在单独的 .css 文件中,随后在HTML文件中引入使用。
                语法:
                1)新建一个扩展名为 .css 的样式文件,把所有css代码都放入此文件中。

h1{
    color: aqua;
    font-size: 80px;
}
h2{
    color: green;
    font-size: 60px;
}
p{
    color: blue;
    font-size: 40px;
}
img{
    width: 200px;
}

        2)在HTML文件中引入 .css 文件。

    <link rel="stylesheet" href="./a.css">

        注意点:

 1、<link> 标签要写在 <head> 标签中

 2、<link> 标签属性说明:
        href :引入的文档来自于哪里。
        rel:说明引入的文档与当前文档之间的关系。
 3、外部样式的优势:样式可以复用、结构清晰、可触发浏览器的缓存机制,提高访问速度,实现了结构与样式的完全分离。
 4、实际开发中,几乎都使用外部样式,这是最推荐的使用方式!

        

        3、样式表的优先级 

        优先级规则:行内样式 > 内部样式 > 外部样式

    1、内部样式、外部样式、,这二者的优先级相同,且:后面的会覆盖前面的(简记为 后来者居上)
     2、同一个样式表中,优先级也和编写顺序有关,且:后面的会覆盖前面的。

分类优点缺点使用频率作用范围
行内样式优先级最高1、结构与样式未分离
2、代码结构混乱
3、样式不能复用
很低当前标签
内部样式1、样式可复用
2、代码结构清晰
1、结构与样式未彻底分离
2、样式不能多页面复用
一版当前页面
外部样式1、样式可多页面复用
2、代码结构清晰
3、可触发浏览器的缓存机制
4、结构与样式彻底分离
需要引入才能使用最高多个页面

        4、CSS语法规范 

        CSS语法规范由两部分构成:

  • 选择器:找到要添加样式的元素。
  • 生命快:设置具体的样式(声明块是由一个或多个声明组成的),声明的格式为:属性名:属性值

备注1:最后一个声明后的分号理论上能省略,但最好还是写上。

备注2:选择器与生命快之间,属性名与属性值之间。均有一个空格,理论上能省略,但最好还是写上。

         CSS中注释的写法:

        h1 {
            /* 颜色为红色,大小为80 */
           color: brown;
           font-size: 80; 
        }
        5、CSS代码风格

        展开风格 :开发时推荐,便于维护和调试。

        h1 {
            /* 颜色为红色,大小为80 */
           color: brown;
           font-size: 80; 
        }

        紧凑风格:项目上线时推荐,可减小文件体积。

        h1{color: brown;font-size: 80;}

        备注:

   项目上线时,我们会通过工具将 展开风格 的代码,变成 紧凑风格 ,这样可以减小文件体积,节约网络流量。同时也能让用户打开网页时速度更快。

二、CSS选择器 

        1、CSS基本选择器
  • 通配选择器
  • 元素选择器
  • 类选择器
  • id选择器

          1.1 通配选择器

                作用:可以选中所有的HTML元素。
                语法:

        * {

                属性名:属性值        

           }

                举例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>通配选择器</title>
    <style>
        * {
            color: cornflowerblue;
        }
    </style>
</head>
<body>
    <h1>欢迎来到土味官网,土的味道我知道</h1>
    <br>
    <h2>土味情话</h2>
    <h3>作者:优秀的网友们</h2>
    <p>万水千山总是情,爱我多点行不行!</p>
    <p>草莓、蓝莓、蔓越莓,今天你想我了没?</p>
    <p>我心里给你留了一块地,我的死心塌地!</p>
</body>
</html>

 

 备注:目前来看通配选择器优点鸡肋,但后面清楚样式时,会对我们有很大的帮助,后面会详细讲。

        1.2 元素选择器

                作用:为页面中某种元素统一设置样式。
                语法:

         标签名 {

                属性名:属性值;

         }

                 举例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>元素选择器</title>
    <style>
        h1 {
            color: brown;
        }
        h2 {
            color: chocolate;
        }
        h3 {
            color: darkgoldenrod;
        }
        p {
            color: darkorchid;
        }
    </style>
</head>
<body>
    <h1>欢迎来到土味官网,土的味道我知道</h1>
    <br>
    <h2>土味情话</h2>
    <h3>作者:优秀的网友们</h2>
    <p>万水千山总是情,爱我多点行不行!</p>
    <p>草莓、蓝莓、蔓越莓,今天你想我了没?</p>
    <p>我心里给你留了一块地,我的死心塌地!</p>
    <br>
    <h2>反土味情话</h2>
    <h3>作者:更优秀的网友们</h3>
    <p>一寸光阴一寸金,劝你死了这条心!</p>
    <p>西瓜、南瓜、哈密瓜,把你打成大傻瓜!</p>
    <p>我心里只有一块地,我的玛莎拉蒂!</p>
</body>
</html>

 元素选择器无法实现差异化设置,例如上面的代码中,所有的p元素效果都一样。

        1.3 类选择器

        作用:根据元素的class值,来选中某些元素。

   class翻译过来有:种类、类别的含义,所以class值,又称:类名

        语法:

    .类名 {
        属性名:属性值
    }

        举例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>类选择器</title>
    <style>
        .speak {
            color: limegreen;
        }
        .answer {
            color: slateblue;
        }
        .big {
            font-size: 100px;
        }
    </style>
</head>
<body>
    <h1>欢迎来到土味官网,土的味道我知道</h1>
    <h2>土味情话</h2>
    <h3>作者:优秀的网友们</h2>
    <p class="speak big">我对你说:万水千山总是情,爱我多点行不行!</p>
    <p class="speak">我对你说:草莓、蓝莓、蔓越莓,今天你想我了没?</p>
    <p class="speak">我对你说:我心里给你留了一块地,我的死心塌地!</p>
    <br>
    <h2>反土味情话</h2>
    <h3>作者:更优秀的网友们</h3>
    <p class="answer">你回答我:一寸光阴一寸金,劝你死了这条心!</p>
    <p class="answer">你回答我:西瓜、南瓜、哈密瓜,把你打成大傻瓜!</p>
    <p class="answer">你回答我:我心里只有一块地,我的玛莎拉蒂!</p>
</body>
</html>

        注意点: 

1、元素的class属性值不带 .  ,但CSS的类选择器腰带 . 

2、class值,是我们自定义的,按照标准:不要使用纯数字、不要使用中文、尽量使用英文与数字的组合,若由多个单词组成,使用 - 做连接,例如:left-menu ,且命名要有意义,做到“见名知意”。
3、一个元素不能写多个class 属性,下面是错误示例:
      <h1 class="speak" class="big">你好啊</h1>
4、一个元素的class属性,能写多个值,要用空格隔开,例如:

      <h1 class="speak big">你好啊</h1>

        1.4 id选择器 

                作用:根据元素的id属性值,来精准的选中某个元素。
                语法:

    #id值 {
        属性名:属性值;
    }

                举例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>ID选择器</title>
    <style>
            #earthy {
                color: brown;
            }
            #turn-earthy {
                color: blue;
            }
    </style>
</head>
<body>
    <h1>欢迎来到土味官网,土的味道我知道</h1>
    <h2 id="earthy">土味情话</h2>
    <h3>作者:优秀的网友们</h2>
    <p>我对你说:万水千山总是情,爱我多点行不行!</p>
    <p>我对你说:草莓、蓝莓、蔓越莓,今天你想我了没?</p>
    <p>我对你说:我心里给你留了一块地,我的死心塌地!</p>
    <br>
    <h2 id="turn-earthy">反土味情话</h2>
    <h3>作者:更优秀的网友们</h3>
    <p >你回答我:一寸光阴一寸金,劝你死了这条心!</p>
    <p >你回答我:西瓜、南瓜、哈密瓜,把你打成大傻瓜!</p>
    <p >你回答我:我心里只有一块地,我的玛莎拉蒂!</p>
</body>
</html>

        注意:

1、id属性值:尽量由字母、数字、下划线(_)、短杠(-)组成,最好以字母开头、不要包含空格、区分大小写。
2、一个元素只能拥有一个id属性,多个元素的id属性值不能相同。
3、一个元素可以同时拥有 id 和 class

属性。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>ID选择器</title>
    <style>
            #earthy {
                color: brown;
            }
            #turn-earthy {
                color: blue;
            }
    </style>
</head>
<body>
    <h1>欢迎来到土味官网,土的味道我知道</h1>
    <h2 id="earthy">土味情话</h2>
    <h3>作者:优秀的网友们</h2>
    <p>我对你说:万水千山总是情,爱我多点行不行!</p>
    <p>我对你说:草莓、蓝莓、蔓越莓,今天你想我了没?</p>
    <p>我对你说:我心里给你留了一块地,我的死心塌地!</p>
    <br>
    <h2 id="turn-earthy">反土味情话</h2>
    <h3>作者:更优秀的网友们</h3>
    <p >你回答我:一寸光阴一寸金,劝你死了这条心!</p>
    <p >你回答我:西瓜、南瓜、哈密瓜,把你打成大傻瓜!</p>
    <p >你回答我:我心里只有一块地,我的玛莎拉蒂!</p>
</body>
</html>

      1.5 基本选择器总结

基本选择器特点用法
通配符选择器选中所有标签,一般用于清除样式*{color:red}
元素选择器选中所有同种标签,但是不能差异化选择h1{color:red}
类选择器选中所有特定类名(class值)的元素 -- 使用频率很高。.say{color:red}
ID选择器

选中特定 id 值的那个元素(唯一的)

#earthy{color:red}

        2、CSS复合选择器

                css选择器整体分类两大类:
                一、基本选择器:
                1)通配选择器
                2)元素选择器
                3)类选择器
                4)ID 选择器
                二、符合选择器:
                1)交集选择器
                2)并集选择器
                3)后代选择器
                4)子元素选择器       
                ......

    1、复合选择器建立在基本选择器之上,由多个基础选择器,通过不同的方式组合而成。
    2、复合选择器可以在复杂结构中,快速而准确的选中元素。

         2.1 交集选择器

                作用:选中同时符合多个条件的元素。

        交集有并且的含义(通俗理解:即...又....的意思),例如:年轻且长得帅。

                语法:选择器1选择器2选择器3...选择器n {}
                举例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>交集选择器</title>
    <style>
        /* 基本选择器有如下几种
           1、* {} 选择所有
           2、h1 {}  选择和h1标签相关的
           3、.class {} 选择类名相等的
           4、#id {} 选择id相等的
           实际上复合选择器就是对上述基本选择器的再次组合*/
        
        /* 第一种方式 标签 + 类名 */
        p.zhangsan {
            color: darkgreen;
        }
        p.lisi {
            color: darkorange;
        }

        /* 第二种方式 类名 + 类名 */
        .zhangsan.friend {
            color: brown;
        }
        .lisi.friend {
            color: blue;
        }
    </style>
</head>
<body>
    <h1 class="zhangsan">我是张三!</h1>
    <h2 class="lisi">我是李四!</h2>
    <hr>
    <p class="zhangsan friend">我是张三的朋友!</p> 
    <p class="lisi friend">我是李四的朋友!</p> 
</body>
</html>

注意:
1、有标签名,标签名必须写在前面
2、id 选择器、通配符选择器,理论上可以作为交集的条件,但实际应用中几乎不用 -- 因为没有意义。

3、交集选择器中不可能出现两个元素选择器,因为一个元素,不可能即是p元素又是span元素。

4、用的最多的交集选择器是:元素选择器配合类名选择器,例如:p.beauty
5、上述两种方式,但是也分优先级,并不是谁写在后面就用谁,后面会单独说优先级的问题。

         2.2 并集选择器

                作用:选中多个选择器对应的元素,又称:分组选择器。
                所谓并集就是或者的含义(通俗理解为要么...要么...的意思),例如,给我转10万块钱或者我报警。

                语法:选择器1,选择器2,选择器3, ... 选择器n {}

                举例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>并集选择器</title>
    <style>
        /* 基本选择器有如下几种
            1、* {} 选择所有
            2、h1 {}  选择和h1标签相关的
            3、.class {} 选择类名相等的
            4、#id {} 选择id相等的
        实际上复合选择器就是对上述基本选择器的再次组合 */

        /* 第一种并集 .class 并集*/
        .A,
        .a {
            color: blue;
        }

        .B,
        .b {
            color: brown;
        }

        /* 第二种并集,标签 与 .class 并集 */
        h1,
        .A {
            color: darkviolet;
        }

        /* 第三种并集,标签与标签的并集 */
        h1,
        p {
            color:cyan;
        }

        /* 第四种并集,标签与id的并集 */
        h1,
        #AA {
            color: lawngreen;
        }
    </style>
</head>
<body>
    <h1 class="A" id="AA">我是字母A!</h1>
    <h1 class="B">我是字母B!</h1>
    <hr>
    <p class="a">我是字母A的小写a!</p>
    <p class="b">我是字母B的小写b!</p>
</body>
</html>

        注意:

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

        2.3 HTML元素间的关系 

        分为:1、父元素 2、子元素 3、祖先元素 4、后代元素 5、兄弟元素

        1、父元素:直接包裹某个元素的元素,就是该元素的父元素

        2、子元素:被父元素直接包含的元素(简记:儿子元素)

        3、祖先元素:父亲的父亲....,一直往外找,都是祖先。父元素也是祖先元素的一种。

        4、后代元素:儿子的儿子...,一直往里找,都是后代。子元素也是后代元素的一种。

        5、兄弟元素:具有相同父元素的元素,互为兄弟元素。

        2.4 后代选择器

        作用:选中指定元素中,符合要求的后代元素。
        语法:选择器1 选择器2 选择器3 .... 选择器n {} (先写祖先,再写后代)
                   选择器之间用空格隔开,空格可以理解为 xxx中的 其实就是后代的意思,选择器可以是我们之前学的任何一种选择器。

        举例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>后代选择器</title>
    <style>
        /* 第一种 选中ul中所有li标签,
           不管是子代还是后代只要是 ul中被li标签包裹的都会被选中*/
        ul li {
            color: brown;
        }
        /* 选中ul中的li标签中的被a标签包裹的元素 */
        ul li a {
            color: blueviolet;
        }

        /* 第二种 选中 .subject类中被li标签包裹的元素 */
        .subject li {
            color: darkblue;
        }

        /* 第三种 包含id选择器,.subject类中id为web的元素 */
        .subject #web {
            color: aqua;
        }

        /* 第四种 嵌套并集选择器或者交集选择器 */
        /* 选中subject类下 li标签中并且id为web的元素 */
        .subject li#web {
            color: black;
        }
        /* 选中subject类下 li标签或者id为web的元素 */
        .subject li,#web {
            color:darkolivegreen;
        }
    </style>
</head>
<body>
    
    <ul>
        <li>抽烟</li>
        <li>喝酒</li>
        <li>烫头</li>
        <div>
            <li>踢球</li>
        </div>
        <span>打篮球</span>
        <li><a href="#">打羽毛球</a></li>
        <li><span>打羽毛球</span></li>
    </ul>
    <hr>
    <ul class="subject">
        <li id="web">前端</li>
        <li>Java</li>
        <li>大数据</li>
        <li>测试</li>
    </ul>

</body>
</html>

        注意:

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

4、后代选择器可以与 并集选择器、交集选择器进行嵌套

        2.5 子代选择器 

                作用:选中指定元素中,符合要求的子元素(儿子元素)。先写父,再写子,又称为子元素选择器、子选择器。
                语法:选择器1>选择器2>选择器3>.....选择器n {}
                选择器之间,用 > 隔开,>可以理解为:"xxx子代",其实就是儿子的意思。
                选择器 1234...n,可以是我们之前学的任何一种选择器。

                举例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>子类选择器</title>
    <style>
        /* 只选择div子代中的a标签 */
        div > a {
            color:brown;
        }
        /* div子代中p标签子代中的a标签 */
        div > p > a {
            color: blueviolet;
        }
        /* foot类中子代a表中的元素 */
        .foot > a {
            color: darkgreen;
        }
    </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>
</html>

        注意:

1、子代选择器,最终选择的时子代,不是父级。
2、子、孙子、重孙子、重重孙子.....统称后代! 子就是指儿子。

        2.6 兄弟选择器

                相邻兄弟选择器:
                作用:选中指定元素后,符合条件的相邻兄弟元素。
                           所谓相邻就是紧挨着它的下一个,简记 睡在我下铺的兄弟。
                语法:选择器1 + 选择器2 {}。
                示例:

        /* 选择向下紧挨着div的p标签
           必须是紧紧相邻,隔着一个标签都不行*/
        div+p{
            color: blueviolet;
        }

                通用兄弟选择器:
                作用:选中指定元素后,符合条件的所有兄弟元素。简记 睡在我下铺的所有兄弟。
                语法:选择器1~选择器2 {}
                示例:

        /* 选中div后面所有的兄弟p元素, */
        div~p{
            color: brown;
        }

                注意:两种兄弟选择器,选择的是下面的兄弟

        2.7 属性选择器

                作用:选中属性值符合一定要求的元素。
                语法:

        1、[属性名] 选中具有某个属性的元素
        2、[属性名 = "值"] 选中包含某个属性,且属性值等于指定值的元素。
        3、[属性名^="值'] 选中包含某个属性,且属性值以指定的值开头的元素。

        4、[属性名$="值"] 选中包含某个属性,且属性值以指定的值结尾的元素。
        5、[属性名*="值"] 选中包含某个属性,属性值包含指定值的元素。 

                举例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>属性选择器</title>
    <style>
        /* 选中具有title属性的元素 */
        p[title] {
            color: brown;
        }
        /* 选中title属性值为2hello2的元素 */
        p[title="2hello2"] {
            color:blue;
        }
        /* 选中title属性以3开头的元素 */
        p[title^="3"] {
            color:blueviolet;
        }
        /* 选中title属性值以4结尾的元素 */
        p[title$="4"] {
            color:coral;
        }
        /* 选中title属性值包含g的元素 */
        p[title*="5"] {
            color:chartreuse;
        }
    </style>
</head>
<body>
    <p title="1hello1">1你好1</p>
    <p title="2hello2">2你好2</p>
    <p title="3hello3">3你好3</p>
    <p title="4hello4">4你好4</p>
    <p title="5hello5">5你好5</p>
</body>
</html>

        2.8 伪类选择器 

                作用:选中特殊状态的元素。伪类可以理解为,并不是一种具体的类,但不是类,是元素的一种特殊状态。

                常用的伪类选择器:

                一、动态伪类:
                1、:link 超链接未被访问的状态
                2、:visited 超链接访问过的状态。
                3、:hover 鼠标悬停在元素上的状态
                4、:active 元素激活的状态。
激活就是按下鼠标不松开

          注意点:遵循 LVHA 的顺序,即:link、visited、hover、active。
         
这四个状态不能乱写,要遵循这个顺序。顺序不对,效果会不奏效。因为当按下按钮时同时符合 link(未被访问)、hover(悬浮状态)、active(激活状态) 这三种状态,如果写的顺序不对,就会按照后来者居上的原则,展示最后的设置。所以顺序就是这样固定的,可以记为  LVHA (LV好!)


           link、visited 是 a 标签所独有的两种状态,别的元素都不具备这两种状态。hover 和 active 是所有元素都能具备的状态。

                5、:focus 获取焦点的元素。

        表单元素才能使用:focus 伪类。
        当用户:点击元素、触摸元素、或通过键盘的“tab” 键等方式,选择元素时,就是获得焦点。
       
就是说比如输入框中,点击输入框,然后输入元素的时候才会有作用。

                举例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>动态伪类</title>
    <style>
        /* link代表没有访问过的a标签 */
        a:link {
            color: brown;
        }
        /* visited代表访问过的a元素 */
        a:visited {
            color: blue;
        }
        /* hover代表鼠标悬浮状态的a元素 */
        a:hover {
            color: darkgreen;
        }
        /* 选中的是激活状态的a元素 */
        a:active {
            color: darkmagenta;
        }
        /* 选中的是悬浮在鼠标悬浮的span元素 */
        span:hover {
            color: darkorange;
        }
        /* 选中的是激活状态的span元素,就是被点击过的 */
        span:active {
            color: hotpink;
        }
        /* 选中的是获取焦点的input元素跟select元素,就是点击之后的表单元素 */
        input:focus,select:focus {
            color: cornflowerblue;
            background-color: chartreuse;
        }
    </style>
</head>
<body>
    <a href="https://www.baidu.com">去百度</a>
    <a href="https://www.jd.com">去京东</a>
    <span>哪也不去</span>
    <br>
    <input type="text">
    <br>
    <input type="text">
    <br>
    <input type="text">
    <select>
        <option value="beijing">北京</option>
        <option value="shanghai">上海</option>
    </select>
</body>
</html>

                二、结构伪类:
                常用的:
                1、:first-child  所有兄弟元素中的第一个。注意强调的是第一个!

        /* 选中div的第一个儿子p元素 
           注意 第一个,意思就是div下面的第一个儿子元素 且 必须是p元素才生效。一个条件不符合都不生效*/
        div>p:first-child {
            color: brown;
        }

        /* 选中div中的后代中的第一个p元素 
           注意 div后代 且 第一个p元素 ,意思就是说要满足时div的后代,且p标签必须是其父标签的第一个儿子,p标签的父级是谁无所谓。*/
           div p:first-child {
            color: brown;
        }

        /* 选中的是第一个p元素 
           注意 第一个p元素 ,意思就是说p标签必须是其父标签的第一个儿子,p标签的父级是谁无所谓。*/
           p:first-child {
            color: brown;
        }

                2、:last-child 所有兄弟元素中的最后一个。

        /* 选中div的最后一个儿子p元素
           注意是儿子元素 且 最后一个p元素, 如果不是最后一个或者最后一个标签不是p元素都不生效 */
        div>p:last-child {
            color: brown;
        }

                3、nth-child(n) 所有兄弟元素中的第n个。

        /* 选中的是div中的前5个p元素 
           关于n的值:官方推荐的写法是 an + b 的格式,
           就是说a和b是一个常数,可以是负数也可以是正数。
           n的值从 1 开始 到正无穷,算出来的值中有包含在内的元素值,就会被选中
           例如 -n + 5 代表着 (-1 * n + 5) n从1开始计算只有1、2、3、4、5 这5个元素在div标签包含的数量中,所以前五个会被选中*/
        div>p:nth-child(-n+5){
            color: blue;
        }

                4、first-of-type 所有同类型兄弟元素中的第一个。

        /* 选中的是div是儿子元素中 所有p元素中的第一个 */
        div>p:first-of-type{
            color: brown;
        }

                5、last-of-type 所有同类型兄弟元素中的最后一个。

        /* 选中的是div是儿子元素中 所有p元素中的第一个 */
                div>p:last-of-type{
            color: brown;
        }

                6、:nth-of-type(n) 所有同类型兄弟元素中的第n个。n的用法与nth-child(n)一致

        div>p:nth-of-type(n){
            color: blueviolet;
        }
关于n的值:
1.
0 不写 :什么都选不中 —— 几乎不用。
2. n :选中所有子元素 —— 几乎不用。
3. 1~ 正无穷的整数 :选中对应序号的子元素。
4. 2n even :选中序号为偶数的子元素。
5. 2n+1 odd :选中序号为奇数的子元素。
6. - n+3 :选中的是前 3 个。

                不常用的(了解即可):
                1、:nth-last-child(n) :所有兄弟元素中的倒数第n个。

        /* 选中div中倒数第3个儿子p元素,与nth-child 相反 */
        div>p:nth-last-child(3){
            color: brown;
        }

                2、:nth-last-of-type(n):所有同类型兄弟元素中的倒数第n个。

        /* 选中div中所有p元素中的倒数第3个,与nth-of-type 相反 */
        div>p:nth-last-of-type(3){
            color: brown;
        }

                3、:only-child 选择没有兄弟的元素(独生子女)。

        /* 选中没有兄弟的p元素 */
        p:only-child {
            color: blue;
        }

                4、:only-of-type 选择没有同类型兄弟的元素。

        /* 选中没有同类型p元素的p元素,就是这个p元素只能有一个,可以有别的其他元素 */
        p:only-of-type{
            color: brown;
        }

                5、:root 根元素。

        /* 选中的是根元素,效果会将整个网页背景变成黑色 */
         :root {
            background-color: black;
         }

                6、:empty 内容为空的元素(空格也算内容)

         /* 选中没有内容的div元素 */
          div:empty{
            background-color: black;
            width: 200px;
            height: 200px;
          }

        

                三、否定伪类

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

        /* 选中div的儿子p元素,但是排除类名为fail的元素 */
        div>p:not(.fail){
            color: brown;
        }

        /* 选中div的儿子p元素,但是排除属性名title以你要加油开头的元素 */
        div>p:not([title^="你要加油"]){
            color: blue;
        }

        /* 选中的是div的儿子p元素,但排除第一个儿子p元素 */
        div>p:not(:first-child){
            color: blue;
        }

                四、UI伪类:

                


http://www.kler.cn/a/406108.html

相关文章:

  • JAVA后端如何调用百度的身份证识别API
  • node报错:Error: Cannot find module ‘express‘
  • 单头蜗杆铣刀计算——记录一下
  • 【vba源码】导入excel批注信息
  • vue中路由缓存
  • shell--第一次作业
  • tcp/ip异常断开调试笔记——lwip
  • Android音频采集
  • C# NetworkStream用法
  • 我对软考“背背背”的看法
  • [已解决]Tomcat 9.0.97控制台乱码
  • Pytorch 遇到 NNPACK 初始化问题unsupported hardware
  • CSS给元素的四个角添加边框
  • 《Django 5 By Example》阅读笔记:p651-p678
  • Python学习32天
  • LeetCode 101题集(随时更新)
  • 【Python】【持续项目】Python-安全项目搜集
  • AI、VR与空间计算:教育和文旅领域的数字转型力量
  • 《数字图像处理基础》学习06-图像几何变换之最邻近插值法缩小图像
  • C语言:strcpy
  • OpenCV和Qt坐标系不一致问题
  • window 中安装 php 环境
  • 云高性能计算 CHPC :基因研究的加速器(二)使用Docker工作流示例
  • PID多变量解耦控制
  • Spring Boot3.x自动配置不生效的排查与解决:IDEA 文件夹命名导致的问题
  • 大数据学习17之Spark-Core