前端 ---- CSS进阶

CSS进阶

1. 选择器进阶

1.1 复合选择器

1.1.1 后代选择器: 空格

作用:根据 HTML标签的嵌套关系,选择父元素后代中 满足条件的元素

选择器语法:选择器1 选择器2{ css }

结果:
在选择器1所找到标签的后代(儿子、孙子、重孙子…)中,找到满足选择器2的标签,设置样式

注意点:

  1. 后代包括:儿子、孙子、重孙子…
  2. 后代选择器中,选择与选择器之前通过 空格 隔开
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 找到div的儿子p设置文字颜色是黑色 */
        div p{
            color: red;
        }
    </style>
</head>
<body>
    <p>这是一个p标签</p>
    <div>
        <p>这是div标签的儿子p</p>
    </div>
</body>
</html>
1.1.2 子代选择器:>

作用:根据HTML标签的嵌套关系,选择父元素子代中 满足条件的元素

选择器语法:选择器1 > 选择器2{ css }

结果:
在选择器1所找到标签的子代(儿子)中,找到满足选择器2的标签,设置样式

注意点:

  1. 子代只包括: 儿子
  2. 子代选择器中,选择器与选择器之前通过 > 隔开
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 空格隔开是后代,儿子,孙子… */
        /* div a{
            color: red;
        } */

        /* 只想选中儿子a---div的儿子a文字颜色是红色 */
        div>a{
            color: red;
        }
    </style>
</head>
<body>
    <div>
        父级
        <a href="#">这是div里面的a标签</a>
        <p>
            <a href="#">这是div标签里面的p标签里面的a标签</a>
        </p>
    </div>
</body>
</html>

1.2 并集选择器:,

作用:同时选择多组标签,设置相同的样式

选择器语法: 选择器1 ,选择器2 { css}

结果:
找到选择器1和选择器2选中的标签,设置样式

注意点:

  1. 并集选择器中的每组选择器之间通过**,**分隔
  2. 并集选择器中的每组选择器可以是基础选择器或者复合选择器
  3. 并集选择器中的每组选择器通常一行写一个,提高代码的可读性
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        p,
        div,
        span,
        h1{
            color: red;
        }
    </style>
</head>
<body>
    <p>pppp</p>
    <div>div</div>
    <span>span</span>
    <h1>h1</h1>
</body>
</html>

1.3 交集选择器:紧挨着

作用:选中页面中同时满足多个选择器的标签选择器

语法:选择器1选择器2{ css}

结果:
(既又原则)找到页面中 既 能被选择器1选中,又 能被选择器2选中的标签,设置样式

注意点:

  1. 交集选择器中的选择器之间是紧挨着的,没有东西分隔
  2. 交集选择器中如果有标签选择器,标签选择器必须写在最前面
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 找到第一个p标签带box类的,设置文字颜色是红色 */
        p.box{
            color: red;
        }
    </style>
</head>
<body>
    <p class="boy">这是一个p标签</p>
    <p>pppppp</p>
    <div class="boy">这是div标签</div>
</body>
</html>

1.4 hover伪类选择器

作用:选中鼠标悬停在元素上的状态,设置样式

选择器语法: 选择器:hover{ css}

注意点:

  1. 伪类选择器选中的元素的某种状态
  2. 任何标签都可以添加伪类选择器
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 设置鼠标悬停时候文字颜色是红色 */
        a:hover{
            color: red;
        }
    </style>
</head>
<body>
    <a href="#">这是超链接</a>
</body>
</html>

1.5 Emmet语法

作用:通过简写语法,快速生成代码

语法:
类似于刚刚学习的选择器的写法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oXefiPKC-1673099072050)(C:\Users\LUOCAI~1\AppData\Local\Temp\1673092325530.png)]

div和p同级:div+p+回车

div和p父子:div>p+回车

css的提示:一般首字母+回车

部分:
<!-- u1里面有3个li,li里面有文字111{文字}-->
<l-- ul>li{1111*3 -->
<ul>
	<li>111</li>
	<li>111</li>
	<li>111</li>
<ul>
<!-- u1有3个1i,1i文字1,2,3 -->
<l-- ul>li{$}*3 -->
<ul>
	<li>1</li>
	<li>2</li>
	<li>3</1i>
</u1>
css
 /* 宽度300,高度200,背景色粉色 */
 w300+h200+bgc+回车

2. 背景相关属性

2.1 背景颜色

属性名:background-color (bgc)

属性值:

颜色取值:关键字、rgb表示法、rgba表示法、十六进制…

注意点:

  1. 背景颜色默认值是透明: rgba(0,0,0,0)、transparent
  2. 背景颜色不会影响盒子大小,并且还能看清盒子的大小和位置,一般在布局中会习惯先给盒子设置背景颜色
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            width: 400px;
            height: 400px;
            background-color: pink;
        }
    </style>
</head>
<body>
    <div>div</div>
</body>
</html>

2.2 背景图片

属性名:background-image (bgi)
属性值:background-image: url(‘图片的路径 ’);
注意点:

  1. 背景图片中url中可以省略引号
  2. 背景图片默认是在水平和垂直方向平铺的
  3. 背景图片仅仅是指给盒子起到装饰效果,类似于背景颜色,是不能撑开盒子的
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            width: 400px;
            height: 400px;
            background-color: pink;
            background-image: url(./images/动漫.jpg);
        }
    </style>
</head>
<body>
    <div>文字</div>
</body>
</html>

2.3 背景平铺

属性名: background-repeat (bgr)
属性值:
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            width: 400px;
            height: 400px;
            background-color: pink;
            background-image: url(./images/动漫.jpg);
            background-repeat: repeat-y;/*y轴平铺*/
        }
    </style>
</head>
<body>
    <div>文字</div>
</body>
</html>

2.4 背景位置

属性名:background-position (bgp)

属性值:background-position: 水平方向位置 垂直方向位置;

在这里插入图片描述

注意点:

  1. 方位名词取值和坐标取值可以混使用,第一个取值表示水平,第二个取值表示垂直
  2. 正数:向右向下移动;负数:向左向上移动 --》注意:背景色和背景图只显示在盒子里面
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            width: 400px;
            height: 400px;
            background-color: pink;
            background-image: url(./images/动漫.jpg);
            background-repeat: no-repeat;
            /* background-position: right bottom; */
            background-position: center;
        }
    </style>
</head>
<body>
    <div>文字</div>
</body>
</html>

2.5 背景相关属性连写

属性名:background (bg)

属性值:

​ 单个属性值的合写,取值之间以空格隔开

书写顺序:

推荐: background: color image repeat position

省略问题:

  1. 可以按照需求省略
  2. 特殊情况:在pc端,如果盒子大小和背景图片大小一样,此时可以直接写 background: url()

注意点

如果需要设置单独的样式和连写

  1. 要么把单独的样式写在连写的下面
  2. 要么把单独的样式写在连写的里面
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            width: 400px;
            height: 400px;
            /* 属性值不分先后顺序:背景色 背景图 背景平铺 背景图位置 */
            /* 背景图位置如果是英文单词可以颠倒顺序,若为数值则不可以颠倒顺序 */
            /* background: pink url(./images/图片1.png) no-repeat center bottom; */
            background: pink url(./images/图片1.png) no-repeat 50px 100px;
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

2.6 (拓展)img标签和背景图片的区别

需求:需要在网页中展示一张图片的效果?

方法一:直接写上img标签即可

​ img标签是一个标签,不设置宽高默认会以原尺寸显示

方法二:div标签+背景图片

​ 需要设置div的宽高,因为背景图片只是装饰的CSS样式,不能撑开div标签

img叫插入图,用于比较重要的图片 如宣传图片,产品,海报…

backgr叫背景图,用于不那么重要的图片,起修饰作用的 如:返回顶部

3. 元素显示模式

3.1 块级元素

显示特点:

  1. 独占一行(一行只能显示一个)
  2. 宽度默认是父元素的宽度,高度默认由内容撑开
  3. 可以设置宽高(css实现)

代表标签:div、p、h系列、ul、li、dl、dt、dd、form、header、 nav、 footer…

3.2 行内元素

显示特点:

  1. 一行可以显示多个
  2. 宽度和高度默认由内容撑开
  3. 不可以设置宽高(设置不会生效)

代表标签: a、span 、b、u、i、s、strong、ins、em、del…

3.3 行内块元素

显示特点:

  1. 一行可以显示多个
  2. 可以设置宽高

代表标签:

  1. input、textarea、button、select…
  2. 特殊情况:img标签有行内块元素特点,但是Chrome调试工具中显示结果是inline

3.4 元素显示模式转换

目的:改变元素默认的显示特点,让元素符合布局要求

语法:

在这里插入图片描述

3.5 (拓展)HTML嵌套规范

  1. 块级元素一般作为大容器,可以嵌套:文本、块级元素、行内元素、行内块元素等等…

​ 但是: p标签中不要嵌套div、p、h等块级元素a标签内部可以嵌套任意元素

​ 注: a标签不能嵌套a标签

4. CSS特性

4.1 继承性

特性:子元素有默认继承父元素样式的特点(子承父业)

可以继承的常见属性(文字控制属性都可以继承)

  1. color
  2. font-style、font-weight、 font-size、 font-family
  3. text-indent、text-align
  4. line-height

注意点:
可以通过调试工具判断样式是否可以继承

4.2 层叠性

特性:

  1. 给同一个标签设置不同的样式一此时样式会层叠加会共同作用在标签上
  2. 给同一个标签设置相同的样式一此时样式会层叠覆盖最终写在最后的样式会生效

注意点:

  1. 当样式冲突时,只有当选择器优先级相同时,才能通过层叠性判断结果

4.3 优先级

特性:不同选择器具有不同的优先级,优先级高的选择器样式会覆盖优先级低选择器样式

优先级公式:

继承<通配符选择器<标签选择器< 类选择器<id选择<行内样式<!important

注意点:

  1. !important写在属性值的后面,分号的前面!
  2. !important不能提升继承的优先级,只要是继承优先级最低!
  3. 实际开发中不建议使用!important。
4.3.1 权重叠加计算

场景:如果是复合选择器,此时需要通过权重叠加计算方法,判断最终哪个选择器优先级最高会生效

权重香加计算公式:(每一级之间不存在进位)

在这里插入图片描述

比较规则:

  1. 先比较第一级数字,如果比较出来了,之后的统统不看
  2. 如果第一级数字相同,此时再去比较第二级数字,如果比较出来了,之后的统统不看
  3. ……
  4. 如果最终所有数字都相同,表示优先级相同,则比较层叠性(谁写在下面,谁说了算!)

注意点: !important如果不是继承,则权重最高,天下第一!

Chrome调试工具

(拓展)查错流程(遇到样式出不来,要学会通过调试工具找错)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虾小眠0526

你们的鼓励是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值