CSS学习

210 阅读7分钟

CSS基础拾遗(核心知识、常见需求)-大海我来了 掘金

  • 核心概念和知识点

  • 语法

    • 声明:键值对
    • 声明块:{}包裹
    • 选择器:作用到对应的HTML元素
    • CSS规则集:选择器和声明块
    • 注释:单行和多行
  • 规则

    • 字符集,导入其他的外部样式表、字体等

    • namespace:必须考虑XML命名空间

    • media:满足媒体查询条件则规则生效

    • page:描述打印文档时布局变化

    • font-face:描述下载的外部字体

    • keyframes:描述CSS动画关键帧

    • document:文档样式表满足给定条件则条件规则组里的规则生效

    • charset:定义字符集(密码本)utf-8

    • import:引入外部样式表

      • link标签除了导入css,还可以导入图片,脚本和字体,import只能导入css(还有js)
    • supports:查询特定CSS是否生效,结合not、and和or操作符

  • 层叠性

    • 用户代理样式表中的声明:浏览器默认样式
    • 作用样式表的常规声明:web开发人员设置样式
    • 作者样式表中的!important声明
    • 结合CSS选择器的优先级和继承性理解
  • 选择器

    • 标签选择器h1
    • 类选择器.checked
    • ID选择器#picker
    • 通配符选择器*
    • 属性选择器[attr]
    • 组合选择器A B、A+B、A>B
  • 伪类

    • 条件伪类

    • 行为伪类::hover、:acitve

    • 状态伪类::target、:link、:focus、:checked

    • 结构伪类::nth-child(n)、:first-child、:nth-of-type(n)

    • 伪元素:::before、::after

    • 优先级:

      • !important 1 0 0 0 0
      • 内联样式 0 1 0 0 0
      • ID选择器 0 0 1 0 0
      • 类选择器 0 0 0 1 0
      • 元素选择器 0 0 0 0 1
      • 通配符、继承 0 0 0 0 0
  • 继承性

    • 子元素继承父元素对应属性计算后的值,不会影响到页面布局的属性存在默认继承行为

    • 字体相关:font-size

    • 文本相关:text-align、color

    • 列表相关:list-style

    • 其他属性:visibility、cursor

    • 其他默认不继承的属性也可以通过属性值控制继承行为

      • inherit
      • initial
      • unset
      • revert
  • 文档流

    • 内容从左到右、从上到下排列显示,行列组成,流式布局,文档流

    • 块级元素占满整行,块级盒子从上到下排列

    • 内联元素一行里一列一列排列

    • 脱离文档流:其他节点忽略该节点并填补

      • 两种方式让元素脱离文档流
      • 浮动:float(清除浮动)
      • 绝对定位absolute和相对定位relative
  • 盒模型

    • 任何元素都可以看成是一个盒子
    • 内容content、内边距padding、边框border、外边距margin
    • 标准盒模型(设置宽度为内容,实际尺寸为内容+内边距+边框)(高版本浏览器)
    • IE盒模型(设置宽度即为实际尺寸内容+内边距+边框)
    • box-sizing:content-box(标准盒模型)、border-box(IE盒模型)
  • 视觉格式化模型visual formatting model

    • 规定盒子怎样放置到页面中,依赖到盒子尺寸、盒子类型、定位方案、兄弟元素或者子元素
    • 盒子类型由display决定:outer display type和inner display type
    • outer display type:block-level box和inline-level box
    • block:占满一行,width和height生效,padding和margin生效
    • inline :不占一行,从左到右自动换行,width和height不会生效,padding和margin不会生效
    • inline-block:不占一行,width和height生效,padding和margin生效
    • inner display type:block container、flex container等
  • 格式化上下文Formatting Context

    • 页面中的一块渲染区域,规定内部子元素如何排版及相互作用

    • BFC\IFC\FFC\GFC

    • BFC块格式化上下文

      • 只有块盒子参与,规定内部如何布局,与区域外部不相干
      • 规则:1、垂直方向一个接一个放置;2、垂直距离由margin决定,同一个BFC的相邻盒子margin发生重叠;3、元素的margin左边,与包含块border的左边相接触;4、BFC区域不会与float盒子重叠;5、BFC是页面上一个隔离的独立容器,容器里面的元素不会影响到外面的元素,反之也如此;6、计算BFC高度时浮动元素也参与计算
      • 如何创建BFC:1、根元素html;2、overflow不为visible;3、设置浮动:float不为none;4、设置定位:position为absolute或fixed;5、定义成块级的非块级元素:display:inline-block/flex/table-cell
      • 应用场景:1、自适应两栏布局:侧边栏固定宽度且左浮动,右侧内容自适应;overflow:auto;2、清除内部浮动:.clearfix::before { content: ‘’; display:table; clear: both };3、防止垂直margin合并:包裹容器overflow:hidden
    • IFC:块级元素中仅包含内联级别元素

      • text-align:center 水平居中
      • vertical-align:middle 垂直居中
  • 层叠上下文

    • HTML元素依据自己定义的属性优先级在Z轴按一定顺序排开

    • z-index:

      • 配合定位position使用
      • 显示孙旭受层叠等级和层叠顺序影响
    • 如何产生层叠上下文:

      • html文档根元素
      • position
    • 层叠等级

    • 层叠顺序

      • z-index<0
      • block
      • 浮动子节点
      • inline/inline-block
      • z-index: 0
      • z-index>0
  • 值和单位

    • CSS的声明由属性和值组成

    • 值有许多类型:

      • 数值
      • 百分比
      • 颜色
      • 坐标位置
      • 函数
    • px

      • CSS中的像素
      • 设备像素(屏幕分辨率)
      • 设备像素比:1个CSS像素等于几个物理像素
      • 像素密度DPI或者PPI
      • 设备独立像素DIP
    • em

      • 相对长度单位
      • 在font-size中相对于父元素的大小2em,字体乘以2
      • 其他属性中使用是相对于自身的字体大小
    • rem

      • 和em一样是相对长度单位,不过rem相对的是HTML的根元素html
      • 750px宽设计图,基于375*812来写页面
      • 从设计图量出来的尺寸除以100即可得到当前元素的rem值
    • vw/vh

      • 分别相对于屏幕视口宽度和高度而言的长度单位
      • 1vw=视口宽度均分成100份中1份的长度
      • 1vh=视口高度均分成100份中1份的长度
      • 多了一种写自适应布局的方案,不再局限于rem
      • vmim:vw和vh中值较小的
      • vmax:vw和vh中值较大的
  • 颜色体系

    • 颜色关键字

      • black、silver、gray、white、maroon
    • transparent关键字

      • 完全透明的颜色,rgba(0,0,0,0)的简写

      • 实现三角形

        • 元素宽高为0,边框粗细填充内容
        • 哪条边需要就加上颜色,不需要则用transparent
      • 移动端增大点击区域:边框增大按钮的点击区域

    • currentColor关键字

    • RGB颜色

      • 十六进制符号 #f00
      • 函数符rgb(255,0,0)\rgba(255,0,0,.2)
    • HSL颜色(色相、饱和度、亮度、不透明度)

  • 媒体查询

    • link标签上media属性:all、print、screen、speech
    • 艾特media让css规则在特性条件下生效:and not only
  • 常见需求

  • 自定义属性

      • -x的格式声明
  • 1px方案

    • Retina显示屏1px边框看起来粗,细化处理

    • 伪元素和transform实现的相对完美的解决方案

      • 原理:将原来元素的border去掉,利用伪元素重做border,transform的scale缩小一半,原先元素相对定位,新的border绝对定位,子绝父相
      • 只设置单条底部边框
      • 同时设置4条边框
  • 清除浮动

    • 解决浮动造成的父元素高度坍塌问题
    • .clearfix::after {content: ‘’; display: block; clear:both}
    • 伪元素在父元素最后生成内容为空的块级元素,通过clear将伪元素移动到它之前的浮动元素的后面
  • 清除浏览器默认样式

    • reset.css和normalize.css
  • 长文本处理

    • 字符太长溢出了容器:默认
    • 字符超出部分换行:overflow-wrap:break-word
    • 字符超出位置使用连字符:hyphens:auto
    • 单行文本超出省略:white-space:nowrap;overflow:hidden;text-overflow:ellipsis
    • 多行文本超出省略:overflow:hidden;text-overflow:ellipsis;。。。
  • 水平垂直居中

    • 单行文本、inline或者inline-block元素

      • 父级块元素水平居中:text-align:center
      • 垂直居中:上下内边距一致;height和line-height一致
    • 固定宽高的块级盒子

      • 1、子绝父相:left和top50%,margin:-1/2height 0 0 -1/2height
      • 2、子绝父相:left、right、top、bottom为0,margin为auto
    • 不固定宽高的块级盒子

      • 1、子绝父相:left和top50%,transform:translate(-50%,-50%)
      • 2、flex:父元素dispaly:flex;jusify-content:center;align-items:center
  • 常用布局