CSS | 青训营笔记

125 阅读6分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天

课堂笔记

课堂重点内容

  1. CSS代码构成
  2. CSS使用方法
  3. CSS流程之选择器、文本渲染
  4. 调试CSS
  5. CSS选择器的特异性
  6. CSS继承
  7. CSS求值过程的解析
  8. CSS布局方式及相关技术
  9. 常规流
  10. 浮动
  11. 绝对定位

详细知识点介绍

CSS代码构成

CSS代码由选择器组成,选择器中包含选择器属性及其属性值,两者共同组成一条声明。

CSS使用方法

  1. 外链:内容和样式分离
  2. 嵌入:把内容和样式放在同一个文件中,样式在head标签里,内容在body标签里
  3. 内联:把样式直接放在标签本身的style中

选择器

  1. 基础选择器:
    • 通配选择器:用※表示,对所有内容使用
    • 标签选择器:直接用标签表示,对指定的一类标签使用
    • id选择器:使用#号表示,对指定的一类标签中的某一个或某些id对应的标签使用
    • 类选择器:使用.表示,对指定的一类标签中的某一个或某些类对应的标签使用
    • 属性选择器:使用[]表示对存在该属性值得标签使用
    • 伪类选择器:使用'标签名:状态值'表示,对标签的不同状态使用不同的选择器
      • 静态伪类:对指定标签使用
      • 动态伪类:对所有标签使用
      • 结构伪类:根据父级节点中的相对位置选中标签使用
  2. 组合选择器:多个选择器组合使用,对组合选择器均满足的标签使用(A、B表示标签)
    • 直接组合:A+B
    • 后代组合:AB
    • 亲子组合:A>B
    • 兄弟选择器:A~B
    • 相邻选择器:A+B
  3. 选择器组:选择器之间用,分隔,对多个标签均使用该选择器

文本渲染

  1. 颜色:
    • RGB红绿蓝三原色:rgb(0-255,0-255,0-255)
    • HSL色相饱和度亮度:hsl(0-360,0-100%,0-100%)
    • alpha透明度:rgba(0-255,0-255,0-255,0-1)、hsla(0-360,0-100%,0-100%,0-1)
  2. font-family:字体
    • 预设字体:指定多个字体,在字体组中逐层寻找系统中存在的字体去展示
    • Web Fonts:在src中放web font的url,使用在线字体
    注意:预设通用字体族,如果上述font-family中指定的字体在系统中均不存在时,使用指定的通用字体族展现,避免展现效果不可控
<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>
        @font-face {
            font-family: "webfont";
            src: url('https://code.z01.com/font/ZoomlaXingtiJ6.woff') format("woff");
        }

        #test {
            font-family: webfont !important;
        }
    </style>
</head>

<body>
    <p id="test">测试字体1号</p>
    <p>测试字体2号</p>
</body>

屏幕截图_20230116_174055.png

  1. font-size:字体大小
    • px:绝对单位
    • em:相对单位
    • %:相对单位
    <style>
        #one {
            font-size: 20px;
        }

        #two {
            font-size: 2em;
        }

        #three {
            font-size: 80%;
        }
    </style>
</head>

<body>
    <ul>
        <li id="one">20px字体大小测试</li>
        <li id="two">2em字体大小测试</li>
        <li id="three">80%字体大小测试</li>
    </ul>
</body>

屏幕截图_20230116_174145.png

  1. font-style:字体风格
    • normal text:正常字体
    • Italic Text:斜体
    <style>
        .normal {
            font-style: normal;
        }

        .italic {
            font-style: italic
        }
    </style>
</head>

<body>
    <p class="normal">字体测试</p>
    <p class="italic">字体测试(斜体)</p>
</body>

屏幕截图_20230116_133951.png

  1. font-weight:字重,字的粗细
    • 数字表示:100-900
    • 字母表示:normal(相当于400)、bald(相当于700)
    注意: 字重的取值范围需要字体本身支持,并不是所有的字体都有100-900之间的字重呈现。
<body>
    <p style="font-weight: 400;">400字重</p>
    <p style="font-weight: normal;">normal字重</p>
    <p style="font-weight: 700;">700字重</p>
    <p style="font-weight: bold;">bold字重</p>
    <p style="font-weight: 100;">100字重</p>
    <p style="font-weight: 200;">200字重</p>
    <p style="font-weight: 300;">300字重</p>
    <p style="font-weight: 400;">400字重</p>
    <p style="font-weight: 500;">500字重</p>
    <p style="font-weight: 600;">600字重</p>
    <p style="font-weight: 700;">700字重</p>
    <p style="font-weight: 800;">800字重</p>
    <p style="font-weight: 900;">900字重</p>
</body>

屏幕截图_20230116_174212.png

  1. line-heigh:行高

  2. text-align:文本对齐

    • center:居中对齐
    • left:左对齐
    • right:右对齐
  3. text-decoration:文本装饰

    • none:无装饰,可用于去除a标签中url自带的下划线
    • underline:文本下下划线
    • line-through:穿过文本的线
    • ocerline:文本上划线
  4. text-indent:段前缩进

    • 单位: px、em、%
  5. white-spacing:空白符的处理方式

CSS选择器的特异度

当多个选择器匹配到同一个标签时,标签采用哪个选择器由选择器的特异度决定,优先使用特异度高的选择器

CSS继承

  • 继承:某些属性会自动继承其父元素的计算值,除非显示指定一个值

  • 初始值:每一个属性都有一个初始值,如果一个标签及其父级标签均未设值,则会采用初始值,也可以采用initial显示地设置初始值

  • 部分属性不能被继承,可以才采用显示集成,使用通配选择器将属性设置为inherit以显示继承

CSS求值过程

  1. 确定声明值:参考样式表中没有从图的声明作为CSS属性值
  2. 层叠冲突:对样式表有冲突的声明值使用层叠规则,确定CSS属性值
  3. 使用继承:对仍然没有值得属性,若可以继承,则继承父级元素的值
  4. 使用初始值:对仍然没有值得属性使用初始值

布局及其相关技术

  1. 布局:确定内容展示大小及位置的算法

  2. 布局相关技术:

    • 常规流
      • 行级
      • 块级
      • 表格布局
      • FlexBox
      • Grid布局
    • 浮动
    • 绝对定位
  3. 盒子模型:宽width+高height+内边距pading+边框border+外边距margin

    • height:如果高度使用百分数表示,只有容器有指定的高度时,百分数才生效
    • pading:使用百分数表示时百分数相对于容器宽度
    • margin:百分数相对于宽度
    • box-sizing: border-box 让声明的width值包含内容的宽、padding、border
    • overfloat:指定溢出盒子的文本的展现形式

常规流

总体规则:块级元素独占一行,行级元素水平依次排列

  1. 行级排版上下文(IFC)
    • text-align: 决定一个盒子的水平对齐
    • vertical-align:决定一个盒子的垂直方向对齐
    • 避开浮动元素
  2. 块级排版上下文(BFC)
    • 盒子从上到下摆放
    • 垂直方向的margin会合并
    • BFC内盒子的margin不会和外面的合并
    • BFC不会和浮动元素重叠
  3. Flex Box
    • justify-content:指定主轴方向的对齐
    • align-items:指定侧轴方向的对齐
    • flex-grow:弹性设置元素扩展空间
    • flex-shrink:弹性设置元素压缩空间
    • flex-basis:元素原本的宽度,不压缩不扩展
  4. Grid布局
    • 先划分格子后摆放元素

float浮动

可以实现文字环绕效果

绝对定位

  1. position
    • static:默认值
    • relative:相对自身原本位置偏移,不脱离常规流,对其他元素无影响
    • absolute: 绝对定位,脱离常规流,相对最近的非static祖先定位,不会对布局造成影响
    • fixed:相对视口绝对定位,脱离常规流
    • sticky:粘性定位,元素固定在页面的某个位置,会随着页面滚动而始终在同一位置

课后个人总结

  1. 脱离常规流/文档流:不按照常规流定位
  2. 为什么要清除浮动:浮动会让元素脱离常规流,影响其他元素的展示,所以有必要清除浮动
  3. 清除浮动的四种方式:
    • 给父级元素添加高度
    • 在浮动元素末尾添加一个额外的块元素标签,设置属性
    • 给父级元素添加voerflow:hidden属性
    • 给父级添加after伪元素,利用after伪元素定义一个clearfix类