闲碎记事本 闲碎记事本
首页
  • JAVA
  • Cloudflare
  • 学完再改一遍UI
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

YAN

我要偷偷记录...
首页
  • JAVA
  • Cloudflare
  • 学完再改一遍UI
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • python

  • vue

  • H5

    • 常用标签
    • CSS学习笔记
      • 选择器
        • 类选择器
        • ID选择器
        • 标签选择器
        • 通配符选择器
        • 后代选择器
        • 子元素选择器
        • 相邻兄弟组合器
        • 通用兄弟选择器
        • 并集选择器
        • 属性选择器
        • 结构伪类选择器
      • 伪元素选择器
        • 伪类(Pseudo-classes)
      • font-文字
      • text-文本
      • display-显示模式
      • 背景
      • CSS 的继承
        • 权重叠加 (层叠加)
      • 盒子模型
        • 盒子组成
        • border
        • border-radius 原理
        • border-radius 应用
        • 圆
        • 圆角矩形
        • content
        • padding
        • margin
        • margin 水平居中
        • 嵌套元素外边距塌陷
        • 解决方案
        • 清除内外边距
        • 解决
        • 阴影
        • 盒子阴影
        • 文字阴影
        • 浮动(重要)
        • 清除浮动
        • 定位
        • 相对定位
        • 绝对定位
        • 固定定位
        • 鼠标样式
        • 元素显示隐藏
        • 盒子模型
        • 过渡(transition)
        • 转换(transform)
        • 小技巧
        • 去除input轮廓线
        • 防止文本框拖拽
        • 设置行内元素/行内有元素块对齐方式
        • 解决图片底部空白
        • 单行文本溢出省略号
        • 多行文本省略号移除
        • CSS实现三角形
        • 保留向下的三角形
        • 渐变
        • Flex布局
    • 媒体查询
    • CSS单位
    • Flex
    • 2D3D
  • C

  • 学习
  • H5
Yan
2023-03-03
目录

CSS学习笔记

MDN查询 (opens new window)

# 选择器

# 类选择器 (opens new window)

. lol{

}

/*  多类名类选择器 */
.lol .pubg{

}
<div class='lol'></div>
<div class='pubg'></div>

# ID选择器 (opens new window)

#name{

}
<div id='name'></div>

# 标签选择器 (opens new window)

P{

}
<p></p>

# 通配符选择器 (opens new window)

选择全部元素

* {

}

# 后代选择器 (opens new window)

.list li{

}
.list li a{

}
<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>
        <a herf="#">这是标签</a>
    </li>
</ul>

<ul class="list">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>
        <a herf="#">这是标签2</a>
    </li>
</ul>

# 子元素选择器 (opens new window)

.list > li{

}
.list > li > a{

}
<ul>
    <li>老大</li>
    <li>老儿</li>
    <li>老三</li>
</ul>

<ul class="list">
    <li>
        <a herf="#">太子</a>
        <a herf="#">二皇子</a>
    </li>
    <li>2</li>
    <li>3</li>
</ul>

# 相邻兄弟组合器 (opens new window)


img + p {
  font-weight: bold;
}

# 通用兄弟选择器 (opens new window)

/* 在任意图像后的兄弟段落 */
img ~ p {
  color: red;
}

# 并集选择器 (opens new window)

.a,
 b,
 c {

}

<div class="a">A</div>
<div class="b">B</div>
<div class="c">C</div>
<div class="d">D</div>

# 属性选择器

选择符 简介
E[att] 选择具有 att 属性的 E 元素
E[att="val"] 选择具有 att 属性且值等于 val 的 E 元素
E[att^="val"] 匹配具有 att 属性且值以 val 开头的 E 元素
E[att$="val"] 匹配具有 att 属性且值以 val 结尾的 E 元素
E[att*="val"] 匹配具有 att 属性且值中含有 val 的 E 元素

# 结构伪类选择器

结构伪类选择器主要根据文档结构来选择器元素,常用于根据父级选择器里面的子元素

选择符 简介
E:first-child 匹配父元素中的第一个子元素 E
E:last-child 匹配父元素中最后一个 E 元素
E:nth-child(n) 匹配父元素中的第 n 个子元素E
E:first-of-type 指定类型 E 的第一个
E:last-of-type 指定类型 E 的最后一个
E:nth-of-type(n) 指定类型 E 的第 n 个

nth-child(n)选择某个父元素的一个或多个特定的子元素

  • n 可以是数字,关键字和公式
  • n 如果是数字,就是选择第 n 个子元素,里面数字从1开始...
  • n 可以是关键字:even 偶数,odd 奇数
  • n 可以是公式:常见的公式如下(如果n是公式,则从0开始计算,但是第0个元素或者超出了元素的个数会被忽略)
公式 取值
2n 偶数
2n+1 奇数
5n 510 15 ...
n+5 从第5个开始 (包含第五个) 到最后
-n+5 前5个 (包含第5个) ...

# 伪元素选择器

伪元素选择器可以帮助我们利用CSS创建新标签元素,而不需要HTML标签,从而简化HTML结构

选择符 简介
::before 在元素内部的前面插入内容
::after 在元素内部的后面插入内容

注意

  • before 和 after 创建一个元素,但是属于行内元素
  • 新创建的这个元素在文档树中是找不到的,所以我们称为伪元素
  • 语法: element.:before@
  • before和 after 必须有 content 属性
  • before 在父元素内容的前面创建元素,after在父元素内容的后面插入元素伪元素选择器和标签选择器一样,权重为1

# 伪类(Pseudo-classes) (opens new window)

待补充。。。。。

LVHA 有序书写,否则不生效

    /* LVHA */
    /* 未访问*/
    a:link{
        background-color: #48b65a;
    }
    /* 选择过 */
    a:visited{
        background-color: #a72929;
    }
    /* 以上为超链接专属伪类 */

    
    /* 得到焦点 */
    a:focus{
        background-color: #d66091;
    }
    /* 鼠标悬浮 */
    a:hover {
        background-color: #FFF;
        text-decoration: none;
    }
    /* 按下没弹起 */
    a:active {
        background-color: #4456db;
        text-decoration: none;
    }

    <a href="https://google.com">链接1</a>
    <a href="https://lovefile.cn">链接4</a>
    <a href="https://baidu.com">链接5</a>
    

# font-文字 (opens new window)

    .font_type{
  /* 文字大小 */
  font-size: 30px;
  /* 文字粗细 */
  font-weight: bold;
  /* 字体 */
  font-family: cursive;
  /* 文字样式
  normal 常规
  italic  选择斜体,如果当前字体没有可用的斜体版本,会选用倾斜体(oblique )替代。
  oblique 选择斜体,如果当前字体没有可用的斜体版本,会选用倾斜体(italic )替代。
          可以精确控制 oblique 字体的倾斜程度
  font-style: oblique 23deg;
  */
  font-style: oblique;
}

# text-文本 (opens new window)

    .text_type{
        /* 字体
        下划线 underline
        删除线 line-through
        顶部线 overline
        什么也没有 none
         */
        text-decoration: underline;
        /*  缩进 按文字大小*/
        text-indent: 2em;
        /* 对齐方式 */
        text-align: center;
        /*
          行高 = 字体高度 + 上下边距
          盒子中,行高 == 容器高度 可达到文字水平居中效果
        */
        line-height: 10px;
    }

# display-显示模式 (opens new window)

    /*设置为块元素, 能设置宽高*/
    .block {
        display: block;
        height: 50px;
    }

    /*设置行内元素, 不能能设置宽高*/
    .inline{
        display: inline;
    }

    /*设置行内块元素, 能设置宽高*/
    .inline-block{
        display: inline-block;
        height: 50px;
        width: 300px;
    }
<div  style="background-color: #48b65a;">
    这是一个div,属于块元素,有宽高占一行,不信你看我背景
</div>
<span style="background-color: #d66091;">
        这是一个span标签,属于行内元素,内容多长我多长,没有宽高,不信你看我背景
    </span>
<a href="#"  style="background-color: #60a3d6;">
    这是一个a标签,也属于行内元素,内容多长我多长,没有宽高,不信你看我背景
</a>

<h1>接下来我要用 display 把div变成  <strong><em><ins>行内元素</ins></em></strong></h1>
<h1>接下来我要用 display 把span变成 <b><i><u>块元素</u></i></b></h1>


<div class="inline" style="background-color: #48b65a;">
    我是一个div ,设置了 [display: inline] 被变成行内元素了,从此没有了宽高,内容多长我多长
</div>
<div class="inline" style="background-color: #48b65a;">
    我是一个div ,设置了 [display: inline-block] 被变成行内块元素了,我虽然不占一行但是能指定宽高
</div>

<span class="block" style="background-color: #d66091;">我是一个 span ,设置了 [display: block] 被变成块元素了 我也能设置宽高了</span>

# 背景 (opens new window)

.background-box{
    height: 500px;
    /*opacity: 0.3;*/
    /*背景色 rgba  其中a表示透明度*/
    background-color: rgba(210, 13, 13, 0.4);
    /* 平铺模式   no-repeat 不平铺*/
    background-repeat: no-repeat;
    /*设置背景图X轴居中, Y轴设置20px */
    background-position: center 20px;
    /*设置背景图*/
    background-image: url("https://ossweb-img.qq.com/upload/webplat/info/yxzj/20230302/49944960390528.jpg");
}


<div class="background-box"></div>

# CSS 的继承

子元素会继承父元素的font-,text- 等样式

选择器 权重
继承 或者 * 0,0,0,0
元素选择器 0,0,0,1
类/伪类选择器 0,0,1,0
ID选择器 0,1,0,0
行内样式 style 1,0,0,0
!important z重要的 最高

# 权重叠加 (层叠加)

复合选择器会有权重叠加的问题

需要注意:权重累加,并不是二进制计算,只会叠加,不会进位

 ul li{
    color: #4ba946;
 }

 li{
    color: red
 }
<ul>
    <li>第一列</li>
    <li>第二列</li>
    <li>第三列</li>
</ul>

因为 ul li 有2级权重 : 0,0,0,1(ul) + 0,0,0,1 (li)= 0,0,0,2

因为 li 只有1级权重 : 0,0,0,0(li)= 0,0,0,1

0,0,0,2 > 0,0,0,1

所以上面示例中 li 会显示green

# 盒子模型

# 盒子组成

  • border 边框
  • content 内容
  • padding 内边距
  • margin 外边距

# border

会影响盒子大小

需要根据实际情况,减去盒子大小

.box {
    /* 线宽 */
    border-width: 5px;
    /* 边框样式
        solid 实线
        dashed 虚线
        detted 点线
    */
    border-style: solid;
    /* 边框颜色 */
    border-color: #FFF;
    /* 边框角度 */
    border-radius: 15px;
    /* 合并边框  */
    border-collapse: collapse;
} 

# border-radius 原理

在一个box的各个角落,放置辣一个等同于border-radius的圆,用圆的弧度,代替了角

# border-radius 应用

border-radius 可以设置多个值

  • 1个值: 相同的 左上,右上,左下,右下
  • 2个值: 左上右下,右上左下
  • 3个值: 左上,右上左下,右下
  • 4个值: 各自指定 左上,右上,左下,右下

# 圆

将 border-radius 设置为正方形盒子的一半

.box{
  height:500px;
  width: 500px;
  border-radius:50%
}

# 圆角矩形

将 border-radius 设置为圆矩形盒子的一半

.box{
  height:300px;
  width: 800px;
  border-radius:400px
}

# content

# padding

会影响盒子大小 需要计算

需要根据实际情况,减去盒子大小

当盒子没有widht和height时,不会撑大。

个人理解是:块元素默认父元素宽高

.padding {
  /* 
  内边距
  如果是1参数:相等的上 左 下 右
  如果是2参数:上下  左右  
  如果是3参数:上 左右 下 
  如果是4参数:分别上 左 下 右
  */
  padding: 10px 5px 10px 5px;

  /* 等效上面 */
  padding-top: 10px;
  padding-left: 5px;
  padding-right: 10px;
  padding-bottom: 5px;
}

# margin

.margin{
        /* 
    外边距
    如果是1参数:相等的上 左 下 右
    如果是2参数:上下  左右 
    如果是3参数:上 左右 下 
    如果是4参数:分别上 左 下 右
    */
    margin: 10px 5px 10px 5px;

    /* 等效上面 */
    margin-top: 10px;
    margin-left: 5px;
    margin-right: 10px;
    margin-bottom: 5px; 
}

# margin 水平居中

  • 盒子设置了宽度
  • margin 左右设置自动 auto
  • 适用于块元素,行内元素/行内块元素给父元素添加:text-align:center即可
.box {
    width: 900px;
    background-color: rgba(210, 13, 13, 0.4);
    /* 块居中 */
    margin: 0px auto;
    /* 行内元素居中 */
    text-align:center;
}
<div class="box">
    <span>1111</span>
</div>

# 嵌套元素外边距塌陷

.father {
    width: 900px;
    background-color: rgba(210, 13, 13, 0.4);
    margin-top: 100px;
}

.son {
    width: 900px;
    background-color: rgba(190, 23, 13, 0.4);
    margin-top: 30px;
}
<div class="father">
    <div class="son"></div>
</div>

以上示例,父元素 上边距100px,子元素30px

由于嵌套关系,父元素被强制下拉,导致父元素 上边距130px

# 解决方案
.father {
    width: 900px;
    background-color: rgba(210, 13, 13, 0.4);
    margin-top: 100px;
    /* 设置边框  恩断义绝框 */
    border : 1px solid transparent;
    /* 设置内边距 划清界线 */
    padding : 1px;
    /* 溢出隐藏  */
    overflow:hidden;  
}

.son {
    width: 900px;
    background-color: rgba(190, 23, 13, 0.4);
    margin-top : 30px;
}

浮动,固定,绝对定位不会有塌陷问题

# 清除内外边距

很多元素都带有外边距,例如:body,li

# 解决
*  {
    padding:0;
    margin:0
}

行内元素,尽量只设置左右内外边距,因为上下设置了也不生效

因为行内元素没有高度

span{
    margin: 0 0;
    padding: 0 0;
}

# 阴影

# 盒子阴影

序列 值 必须 描述
1 h-shadow true 水平阴影位置,允许负值 (X轴)
2 v-shadow true 垂直阴影位置,允许负值 (Y轴)
3 blur false 模糊距离(模糊)
4 spread false 阴影的尺寸(大小)
5 color false 阴影的颜色
6 inser false 将外部阴影改为内部阴影

注意 outset 默认不需要手动指定,否则不生效

/* 

 */
.box-shadow{
   box-shadow: 10px 10px 10px 10px blank
}

# 文字阴影

序列 值 必须 描述
1 h-shadow true 水平阴影位置,允许负值 (X轴)
2 v-shadow true 垂直阴影位置,允许负值 (Y轴)
3 blur false 模糊距离(模糊)
4 color false 阴影的颜色
/* 

 */
.text-shadow{
   box-shadow: 10px 10px 10px blank
}

# 浮动(重要)

可以让块元素一行内并排显示

个人理解:就是元素在原来的位置飘起来,向指定的方向一直飘,直到与边框(父元素边界)或者另一个浮动元素进行贴贴

网页布局:多个块级元素,纵向排列标准流,横向排列找浮动

特性

  • 浮动会脱离标准流(脱标)
    • 脱离:简单理解,飞起来,原来位置被后面的元素占有
    • 浮动只会影响后面的标准流,不会影响前面的标准流(简单理解,浮动是飞,但是是前面的标准流是空气墙),所以可以用 标准流分割浮动
  • 浮动的元素会一行内显示,并且元素顶部对齐
    • 父元素宽带不够容纳,会 新起一行,所以会适应不同屏幕宽度
  • 浮动的元素具有行内块元素的
    • 添加浮动后,任何元素都会拥有行内块元素的特性

float

属性值 描述
none 不浮动(默认值)
left 元素左浮动
rigth 元素右浮动
.float{
    float: left; 
}

# 清除浮动

为什么要清除浮动

很多情况下,我们浮动都会给父容器指定高度

但是很多情况下,我们不方便给父容器指定高度

这时候父容器高度为0,而浮动不会占用高度,这时候就会影响下面的标准流

浮动不会压住文字或者图片

清除浮动方式

原理都是划清容器界限闭合处理

方式 优点 缺点
额外标签法(隔墙法) 通俗易懂,书写方便 添加了许多无意义标签,结构差
父级添加 overflow 书写简单 如果父容器有高度,无法显示溢出部分
父级添加 after伪元素 结构语义正确,css生成 IE6-7不支持,但是我也不想兼容
父级添加双伪元素 结构语义正确,css生成 IE6-7不支持,但是我也不想兼容

方式一: clear 隔墙法

属性值 描述
both 同事清除左右两侧浮动影响
left 清除元素左浮动
rigth 清除元素右浮动
    .box {
        width: 800px;
                    height: 200px; 
        border: 1px solid blue;
        margin: 0 auto;
    }

    .damao { 
        float: left;
        width: 300px;
        height: 200px;
        background-color: purple;
    }

    .ermao {
        float: left;
        width: 200px;
        height: 200px;
        background-color: pink;
    }

    .footer {
        height: 200px;
        background-color: black;
    }

    /* 核心代码 */
    .clear {
        clear: both;
    }
<div class="box">
    <div class="damao">大毛</div>
    <div class="ermao">二毛</div>
    <div class="ermao">二毛</div>
    <div class="ermao">二毛</div>
    <div class="ermao">二毛</div>
    <!-- <div class="clear"></div> -->
    <!-- 这个新增的盒子要求必须是块级元素不能是行内元素 -->
    <span class="clear"></span>
</div>
<div class="footer"></div>

方式二: overflow 父元素添加 overflow

如果父容器有高度,无法显示溢出部分

修改上面box:设置overflow: hidden;

    .box {
        /* 清除浮动 */
        overflow: hidden;
        width: 800px;
        /* 如果这里设置了高度,溢出部分将会隐藏 */
        /* height: 300px; */
        border: 1px solid blue;
        margin: 0 auto;
    }

方式三: 伪元素

    /*解释 
    在指定的类后面新增一个
    内容为""
    高度为0
    带有 clear: both 样式的
    不显示的
    块元素
    */
    .clearfix:after {
        content: "";
        display: block;
        height: 0;
        clear: both;
        visibility: hidden;
    }

    .clearfix {
        /* IE6、7 专有 */
        *zoom: 1;
    }
    <div class="box clearfix"></  div>

方式四: 双伪元素

    .clearfix:before,
    .clearfix:after {
        content: "";
        display: table;
    }

    .clearfix:after {
        clear: both;
    }

    .clearfix {
        *zoom: 1;
    }
    <div class="box clearfix"></  div>

# 定位

# 相对定位

.box {
    position: relative;
}

  • 在元素原来位置偏移量
  • 会保留元素原来位置

# 绝对定位

.box {
    position: absolute;
}

  • 在屏幕可视区域偏移
  • 父容器必须指定定位,否则默认为屏幕 (父相子绝)
  • 不会保留元素原来位置

在父元素居中对齐方法

左/右偏移50% - magin-left/magin-right 自身宽度一般

水平居中同理

# 固定定位

.box {
    position: fixed;
}

  • 不会保留原来位置
  • 在屏幕可是区域偏移
  • 不会随着屏幕滚动
.box {
    position: sticky;
}

  • 会保留原来位置
  • 在达到指定偏移位置时固定

# 鼠标样式

属性值 描述
default 默认
pointer 小手
move 移动
text 文本
not-allowed 禁止
.mouse{
  cursor: default;
}

# 元素显示隐藏

  • display: none 隐藏元素不保留位置
  • visibility: hidden 隐藏元素不保留位置
  • overflow 控制溢出部分显示处理

.box{
  display: none;
  visibility: hidden;
  overflow: auto;
}

# 盒子模型

CSS3中可以通过 box-sizing 来指定盒模型,有2个值:即可指定为content-box、 border-box,这样我们计算盒子大小的方式就发生了改变

可以分成两种情况:

  • box-sizing:content-box 盒子大小为 width + padding+ border
  • box-sizing:border-box 盒子大小为width

如果盒子模型我们改为了box-sizing: border-box ,那padding和border就不会撑大盒子了(前提padding和border不会超过width宽度)

# 过渡(transition)

transition

transition:要过渡的属性 花费时间 运动曲线 何时开始

  1. 属性 : 想要变化的 css 属性,宽度高度背景颜色内外边距都可以。如果想要所有的属性都变化过渡,写all
  2. 花费时间:单位是秒(必须写单位) 比如 0.5s
  3. 运动曲线:默认是ease (可以省略)
    • linoar 匀速
    • ease 逐慢下来
    • ease-in 加速
    • ease-out 减速
    • ease-in-out 先加速后减速
  4. 何时开始:单位是秒(必须写单位)可以设置延迟触发时间 默认是0s (可以省略)

.transition{
  transition: all  .5s ease;
  transform: ;
}

# 转换(transform)

移动(translate)

  • 定义2D转换中的移动,沿着X和Y 轴移动元
  • translate最大的优点:不会影响到其他元素的位置
  • translate中的百分比单位是相对于自身元素的 translate:(50%,50%)
    • 例如自身长,宽为: 200px ,100px, translate:(50%,50%) 将会向右下方分别移动100px,50px
  • 对行内标签没有效果
/*使用 translate 实现居中 */
.box {
    position: absolute;
    width: 200px;
    height: 100px;
    top: 50%;
    left: 50%;
    transform: translate(50%, 50%)
}

.box1 {
    transform: translateX(10%)
}

.box2 {
    transform: translateY(1px);
    transform-origin: left;
}


transform-origin 中心点转换

  • 语法transform-origin: x y; 注意后面的参数 x和y 用空格隔开
  • x,y 默认转换的中心点是元素的中心点(50% 50%)
  • 还可以给x y设置像素 或者 方位名词 top bottom left right center)
.box{
    /*transform-origin: 10px 20px;*/
    transform-origin: top left;
}

旋转(rotate)

  • 语法 transform: rotate(度数)
  • rotate里面跟度数,单位是deg 比如 rotate(45deg)
  • 角度为正时,顺时针,负时,为逆时针
  • 默认旋转的中心点是元素的中心点
.box {
    transform: rotate(45deg)
}

缩放(scale)

# 小技巧

# 去除input轮廓线


input{ 
  outline: none;
}

# 防止文本框拖拽

textarea{
  resize: none;
}

# 设置行内元素/行内有元素块对齐方式

属性值 描述
baseline 默认: 父元素基线对齐,及父元素底部对齐
top 行内最高元素顶部对齐
middle 父元素中线对齐
bottom 行内最低元素底部对齐

.align {
  vertical-align: middle; 
}

# 解决图片底部空白

  • 给图片添加 vertical-align bottom | top
  • 转换图片为块级元素 display:block

# 单行文本溢出省略号

必须满足三个条件

  1. 先强制一行内显示文本 white-space: nowrap; (默认 normal自动换行)
  2. 超出的部分隐藏 overflow: hidden;
  3. 文字用省略号替代超出的部分 text-overflow: ellipsis;

# 多行文本省略号移除

  1. 超出部分隐藏 overflow: hidden;
  2. 超出部分显示省略号 text-overflow: ellipsis;
  3. 弹性伸缩盒子模型显示 display: -webkit-box;
  4. 限制在一个块元素显示的文本的行数 -webkit-line-clamp: 2;
  5. 设置或检索伸缩盒对象的子元素的排列方式 -webkit-box-orient: vertical;

# CSS实现三角形

观察

.box{
    width: 0;
    height: 0;
}
.triangle{
    border: 100px solid;
    border-color: orangered skyblue gold yellowgreen;
}
<div class="box triangle"></div>

渲染

# 保留向下的三角形
  • 去除底边框
  • 左右边框设置透明
.bottom{
    /*去除底边框*/
    border-bottom-width: 0;
    /*左右边框设置透明*/
    border-color: orangered transparent;
}

<div class="box triangle bottom"></div>

渲染

# 渐变

.gradient {
  width: 100%;
  height: 50px;
  background: linear-gradient(to right,#b2effe 40%, rgb(136,254,230))
}
<div class="gradient"></div>

渲染

# Flex布局

跳转此处查看

上次更新: 2025/05/14, 01:34:05
常用标签
媒体查询

← 常用标签 媒体查询→

最近更新
01
Caddy操作指南
04-25
02
Swap空间
04-22
03
Alist使用
04-21
更多文章>
Theme by Vdoing | Copyright © 2022-2025 YAN | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式