• 深入理解CSS:探索前端开发的进阶技巧


    css进阶

    更多web开发知识欢迎访问我的专栏>>>

    01-复合选择器

    定义:由两个或多个基础选择器,通过不同的方式组合而成。

    作用:更准确、更高效的选择目标元素(标签)。

    后代选择器

    后代选择器:选中某元素的后代元素

    选择器写法:父选择器 子选择器 { CSS 属性},父子选择器之间用空格隔开。

    <style>
      div span {
        color: red;
      }
    style>
    <span> span 标签span>
    <div>
      <span>这是 div 的儿子 spanspan >
    div>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    子代选择器

    子代选择器:选中某元素的子代元素(最近的子级)。

    选择器写法:父选择器 > 子选择器 { CSS 属性},父子选择器之间用 > 隔开。

    <style>
      div > span {
        color: red;
      }
    style>
    
    <div>
      <span>这是 div 里面的 spanspan>
      <p>
        <span>这是 div 里面的 p 里面的 spanspan>
      p>
    div>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    并集选择器

    并集选择器:选中多组标签设置相同的样式。

    选择器写法:选择器1, 选择器2, …, 选择器N { CSS 属性},选择器之间用 , 隔开。

    <style>
      div,
      p,
      span {
        color: red;
      }
    style>
    
    <div> div 标签div>
    <p>p 标签p>
    <span>span 标签span>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    交集选择器

    交集选择器:选中同时满足多个条件的元素。

    选择器写法:选择器1选择器2 { CSS 属性},选择器之间连写,没有任何符号。

    <style>
      p.box {
      color: red;
    }
    style>
    
    <p class="box">p 标签,使用了类选择器 boxp>
    <p>p 标签p>
    <div class="box">div 标签,使用了类选择器 boxdiv>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    注意:如果交集选择器中有标签选择器,标签选择器必须书写在最前面。

    伪类选择器

    伪类选择器:伪类表示元素状态,选中元素的某个状态设置样式。

    鼠标悬停状态:选择器:hover { CSS 属性 }

    <style>
      a:hover {
        color: red;
      }
      .box:hover {
        color: green;
      }
    style>
    
    <a href="#">a 标签a>
    <div class="box">div 标签div>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    超链接伪类
    选择器作用
    :link选择尚未被访问的超链接。
    :visited选择已被访问过的超链接。
    :hover鼠标悬停在超链接上时应用的样式。
    :active超链接被点击时应用的样式,通常用于短暂的样式变化,以示被点击。
    :focus超链接获取焦点时应用的样式,通常用于键盘导航时给予用户视觉反馈。

    提示:如果要给超链接设置以上四个状态,需要按 LVHA 的顺序书写。

    经验:工作中,一个 a 标签选择器设置超链接的样式, hover状态特殊设置

    a {
      color: red;
    }
    
    a:hover {
      color: green;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    02-CSS特性

    CSS特性:化简代码 / 定位问题,并解决问题

    • 继承性
    • 层叠性
    • 优先级

    继承性

    继承性:子级默认继承父级的文字控制属性

    描述属性效果
    设置文字大小font-size控制文字的大小。
    设置文字样式font-style控制文字的样式,如斜体(italic)或正常(normal)。
    设置行高line-height控制行与行之间的距离,实现单行文字的垂直居中。
    设置字体族font-family指定用于显示文本的字体系列,可以是单个字体名称或一系列备选字体。
    设置文字对齐方式text-align控制文本在盒子中的水平对齐方式,如左对齐、右对齐、居中等。
    设置文本缩进text-indent控制段落的首行缩进。
    设置文本修饰线text-decoration添加文本的修饰线,如下划线、删除线等。
    设置文字颜色color控制文本的颜色。

    层叠性

    特点:

    • 相同的属性会覆盖:后面的 CSS 属性覆盖前面的 CSS 属性
    • 不同的属性会叠加:不同的 CSS 属性都生效
    <style>
      div {
        color: red;
        font-weight: 700;
      }
      div {
        color: green;
        font-size: 30px;
      }
    style>
    
    <div>div 标签div>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    注意:选择器类型相同则遵循层叠性,否则按选择器优先级判断。

    尝试一下>>>

    优先级

    优先级:也叫权重,当一个标签使用了多种选择器时,基于不同种类的选择器的匹配规则

    <style>
      div {
        color: red;
      }
      .box {
        color: green;
      }
    style>
    
    <div class="box">div 标签div>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    基础选择器

    规则:选择器优先级高的样式生效

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

    (选中标签的范围越大,优先级越低)

    复合选择器-叠加

    叠加计算:如果是复合选择器,则需要权重叠加计算。

    公式:(每一级之间不存在进位)

    (行内样式,id选择器个数,选择器个数,标签选择器个数)

    规则:

    • 从左向右依次比较选个数,同一级个数多的优先级高,如果个数相同,则向后比较
    • !important 权重最高
    • 继承权重最低

    练习:

    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>权重叠加巩固练习title>
      <style>
        /* (0, 0, 2, 1) */
        .c1 .c2 div { 
    			color: blue;
    		}
    		
        /* (0, 1, 0, 1) */
    		div #box3 {
    			color:green;
    		}
    		
        /* (0, 1, 1, 0) */
    		#box1 .c3 {
    			color:orange;
    		}
      style>
    head>
    <body>
      <div id="box1" class="c1">
    		<div id="box2" class="c2">
    			<div id="box3" class="c3">
    				这行文本是什么颜色的?
    			div>
    		div>
    	div>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    尝试一下>>>

    03-Emmet 写法

    Emmet写法:代码的简写方式,输入缩写 VS Code 会自动生成对应的代码。

    以下是关于HTML标签的Emmet写法的表格:

    说明标签结构Emmet写法
    创建一个div标签
    div
    创建一个带有class的div标签
    div.classname
    创建一个带有id的div标签
    div#idname
    创建一个段落标签

    p
    创建一个带有文本内容的段落标签

    Text

    p{Text}
    创建一个带有链接的标签a[href="#"]
    创建一个列表项标签
  • li
    创建一个无序列表标签
      ul
      创建一个有序列表标签
        ol
        创建一个图片标签img[src=""][alt=""]

        这些Emmet写法可以帮助快速生成HTML标签结构。

        以下是关于CSS的Emmet写法的表格:

        说明CSS结构Emmet写法
        创建一个带有class的样式表link:css
        创建一个内联样式表style
        创建一个选择器为.classname的样式规则.classname {}.classname
        创建一个选择器为#idname的样式规则#idname {}#idname
        创建一个选择器为tagname的样式规则tagname {}tagname
        向选择器为.classname的样式规则中添加属性.classname { property: value; }.classname { property: value; }
        向选择器为#idname的样式规则中添加属性#idname { property: value; }#idname { property: value; }
        向选择器为tagname的样式规则中添加属性tagname { property: value; }tagname { property: value; }

        这些Emmet写法可以帮助快速编写CSS样式规则。

        04-背景属性

        背景图

        网页中,使用背景图实现装饰性的图片效果。

        • 属性名:background-image(bgi)
        • 属性值:url(背景图 URL)
        div {
          width: 400px;
          height: 400px;
        
          background-image: url(./images/1.png);
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6

        提示:背景图默认有平铺(复制)效果

        平铺方式

        属性名:background-repeat(bgr)

        属性值效果
        repeat默认值,背景图像在水平和垂直方向上重复。
        repeat-x背景图像在水平方向上重复,垂直方向不重复。
        repeat-y背景图像在垂直方向上重复,水平方向不重复。
        no-repeat背景图像不重复,仅在盒子内显示一次。
        space背景图像沿着盒子的边缘平铺,且图像之间有空白间隔,使得图片不会重叠。
        round背景图像沿着盒子的边缘平铺,且图像会被缩放以适应整数倍的尺寸。
        div {
          width: 400px;
          height: 400px;
          background-color: pink;
          background-image: url(./images/1.png);
        
          background-repeat: no-repeat;
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8

        背景图位置

        属性名:background-position(bgp)

        属性值:水平方向位置 垂直方向位置

        • 关键字

        以下是关于背景图位置的关键字的表格:

        关键字位置
        top图片顶部对齐
        bottom图片底部对齐
        left图片左侧对齐
        right图片右侧对齐
        center图片居中对齐
        top left图片左上角对齐
        top right图片右上角对齐
        bottom left图片左下角对齐
        bottom right图片右下角对齐

        这些关键字可以帮助你控制背景图在元素中的位置。

        • 坐标
          • 水平:正数向右;负数向左
          • 垂直:正数向下;负数向上
        div {
          width: 400px;
          height: 400px;
          background-color: pink;
          background-image: url(./images/1.png);
          background-repeat: no-repeat;
        
          background-position: center bottom;
          background-position: 50px -100px;
          background-position: 50px center;
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11

        提示:

        • 关键字取值方式写法,可以颠倒取值顺序
        • 可以只写一个关键字,另一个方向默认为居中;数字只写一个值表示水平方向,垂直方向为居中

        背景图缩放

        作用:设置背景图大小

        属性名:background-size(bgz)

        常用属性值:

        • 关键字

          • cover:等比例缩放背景图片以完全覆盖背景区,可能背景图片部分看不见
          • contain:等比例缩放背景图片以完全装入背景区,可能背景区部分空白
        • 百分比:根据盒子尺寸计算图片大小

        • 数字 + 单位(例如:px)

        div {
          width: 500px;
          height: 400px;
          background-color: pink;
          background-image: url(./images/1.png);
          background-repeat: no-repeat;
          
          background-size: cover;
          background-size: contain;
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10

        提示:工作中,图片比例与盒子比例相同,使用 cover 或 contain 缩放背景图效果相同。

        背景图固定

        作用:背景不会随着元素的内容滚动。

        属性名:background-attachment(bga)

        属性值:fixed

        body {
          background-image: url(./images/bg.jpg);
          background-repeat: no-repeat;
          background-attachment: fixed;
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5

        背景复合属性

        属性名:background(bg)

        属性值:背景色 背景图 背景图平铺方式 背景图位置/背景图缩放 背景图固定(空格隔开各个属性值,不区分顺序

        div {
          width: 400px;
          height: 400px;
        
          background: pink url(./images/1.png) no-repeat right center/cover;
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6

        尝试一下>>>

        05-显示模式

        显示模式:标签(元素)的显示方式。

        作用:布局网页的时候,根据标签的显示模式选择合适的标签摆放内容。

        块级元素

        特点:

        • 独占一行
        • 宽度默认是父级的100%
        • 添加宽高属性生效

        image-20240221110959046

        行内元素

        特点:

        • 一行可以显示多个
        • 设置宽高属性不生效
        • 宽高尺寸由内容撑开

        image-20240221111324094

        行内块元素

        特点:

        • 一行可以显示多个
        • 设置宽高属性生效
        • 宽高尺寸也可以由内容撑开

        image-20240221111402012

        转换显示模式

        属性:display

        以下是关于转换显示模式的表格:

        属性值效果
        block将元素显示为块级元素,使元素呈现为一个块,独占一行,可以设置宽度和高度,可容纳其他元素。
        inline将元素显示为内联元素,使元素呈现为行内元素,不独占一行,只占据内容所需的空间,不可设置宽高。
        inline-block将元素显示为内联块元素,元素呈现为行内元素但可以设置宽度和高度,与其他行内元素在一行显示。
        none隐藏元素,使元素不可见且不占据空间。
        flex将元素设置为弹性容器,使其子元素成为弹性项目,可利用弹性布局方式控制元素的排列和对齐方式。
        grid将元素设置为网格容器,使其子元素成为网格项目,可利用网格布局方式控制元素的排列和对齐方式。
        inline-flex将元素设置为内联弹性容器,使其子元素成为弹性项目,可利用弹性布局方式控制元素的排列和对齐方式。
        inline-grid将元素设置为内联网格容器,使其子元素成为网格项目,可利用网格布局方式控制元素的排列和对齐方式。

        这些属性值可用于控制元素的显示模式,从而实现不同的布局效果。

      1. 相关阅读:
        即时通讯开发Netty实现心跳机制、断线重连机制
        M系列 Mac使用Homebrew下载配置git和连接GitHub
        1+x证书-网络安全
        数据结构实验6 :图的存储与遍历(邻接矩阵的深度优先遍历DFS和邻接表的广度优先遍历BFS)
        js:什么是编译时和运行时
        语义分割算法
        达梦数据库表空间管理常用SQL
        超硬核,拒绝内卷全靠阿里大能整理的这份 Java 核心手册,堪称强无敌,谁来不说一声牛 AC
        牛血清白蛋白/人血清白蛋白/卵清白蛋白/小鼠血清白蛋白纳米粒改性Angiopep血管肽(2022已更新)
        C++之通俗易懂学模版
      2. 原文地址:https://blog.csdn.net/u014158743/article/details/136240947