CSS| 青训营笔记

82 阅读4分钟

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

一、个人笔记

Cascading Style Sheets

选择器Selector
Declaration {Property: value}

  • 外链link 推荐使用
  • 嵌入style
  • 内联style
CSS是如何工作的

WechatIMG1.jpeg

Selector

  • 找出页面中的元素,以便给它们设置样式
  • 使用多种方式选择元素
    按照标签名、类名或id
    按照属性
    按照DOM树中的位置
    通配选择器* 标签选择器 id选择器#id 类选择器 属性选择器
    例:
    href^="#" href以#开头
    href$=".jpg" 以.jpg结尾
伪类pseudo-classes

不基于标签和属性定位元素

  • 状态伪类
  • 结构性伪类 基于DOM树

例:
链接的状态:
link默认状态
visited访问过
hover鼠标移上
active鼠标按下
输入框focus状态
li:first-child last-child

组合Combinators

WechatIMG2.jpeg

选择器组

颜色

  • RGB
  • HSL
    Hue色相0~360
    Saturation饱和度0~100%
    Lightness亮度0~100%
    alpha不透明度0~1

字体font-family

WechatIMG3.jpeg

Web Fonts
font-size
  • 关键字small、medium、large
  • 长度px、em
  • 百分数 相对于父元素字体大小
font-weight粗细

100~900
400-normal
700-bold 需要字体本身支持

line-height行高

字体大小的1.6倍

text-align两端对齐
space
text-indent首行缩进
text-decoration下划线 删除线
white-space空白符 normal nowrap pre pre-wrap保留空格换行 pre-line保留换行

调试CSS

  • 右键点击页面,选择检查
  • 使用快捷键 Ctrl+Shift+I(Win) Cmd+Opt+I(Mac)

选择器优先级

特异度Specificity高优先 WechatIMG4.jpeg 特殊样式额外的class覆盖
color、font-size等可以继承

不可继承属性:显式继承
*{
  box-sizing:inherit;
}

hrml{
  box-sizing: border-box;
}

.some-widget{
  box-sizing: content-box;
}
初始值
  • CSS中,每个属性都有一个初始值
    background color的初始值为transparent
    margin-left的初始值为0
  • 可以使用initial关键字显式重置为初始值
    background color: initial

CSS的求值过程

WechatIMG6.jpeg WechatIMG8.jpeg WechatIMG7.jpeg

盒模型

WechatIMG112.jpeg

布局Layout

  • 确定内容的大小和位置的算法
  • 依据元素、容器、兄弟节点和内容等信息来计算 WechatIMG10.jpeg
width
  • 指定content box宽度
  • 取值为长度、百分数、auto
  • auto由浏览器根据其他属性决定
  • 百分数相对于容器的content box宽度
height
  • 指定content box高度
  • 取值为长度、百分数、auto
  • auto取值由内容计算得来
  • 百分数相对于容器的content box高度
  • 容器有指定的高度时,百分数才生效
padding页边距
  • 指定元素四个方向的内边框
  • 百分数相对于容器的宽度
border边框
  • 指定容器边框样式、粗细和颜色
  • 三种属性
    border-width
    border-style
    border-color
  • 四个方向
    border-top
    border-right
    border-bottom
    border-left WechatIMG122.jpeg
margin外边距
  • 指定元素四个方向的外边距
  • 取值可以是长度、百分数、auto
  • 百分数相对于容器的宽度 WechatIMG13.jpeg margin collapse: bottom top取大值
border-box

WechatIMG14.jpeg

overflow

visible hidden scroll

块级&行级

WechatIMG15.jpeg WechatIMG16.jpeg

display属性

block 块级盒子
inline 行级盒子
inline-block 本身是行级,可以放在行盒中;可以设置宽高;作为一个整体不会被拆散成多行
none 排版时完全被忽略

行级排版上下文

  • Inline Formatting Context
  • 只包含行级盒子的容器会创建一个IFC
  • IFC内的排版规则
    盒子在一行内水平摆放
    一行放不下时,换行显示
    text-align决定一行内盒子的水平对齐
    vertical-align决定一个盒子在行内的垂直对齐
    避开浮动float元素

块级排版上下文

  • Block Formatting Context
  • 某些容器会创建一个BFC
    根元素
    浮动、绝对定位、inline-block
    Flex子项和Grid子项
    overflow值不是visible的块盒
    display:flow-root
  • BFC内的排版规则
    盒子从上到下摆放
    垂直margin合并
    BFC内盒子的margin不会与外面的合并
    BFC不会和浮动元素重叠
Flex Box
  • 一种新的排版上下文
  • 它可以控制子级盒子的:
    摆放的流向
    摆放顺序
    盒子宽度和高度
    水平和垂直方向的对齐
    是否允许折行 WechatIMG172.jpeg 对齐 WechatIMG18.jpeg WechatIMG19.jpeg
Flexibility
  • 可以设置子项的弹性:当容器有剩余空间时,会伸展;容器空间不够时,会收缩。
  • flex-grow有剩余空间时的伸展能力
  • flex-shrink容器空间不足时收缩的能力
  • flex-basis没有伸展或收缩时的基础长度 WechatIMG20.jpeg
display:grid
  • 使元素生成一个块级的Grid容器
  • 使用grid-template相关属性将容器划分为网格
  • 设置每一个子项占哪些行/列
划分网格

WechatIMG21.jpeg WechatIMG22.jpeg

float浮动

绝对定位

position属性

static 默认值,非定位元素
relative 相对自身原本位置偏移,不能脱离文档流
absolute 绝对定位,相对非static祖先元素定位
fixed 相对于视口绝对定位

position:relative
  • 在常规流里面布局
  • 相对于自己本应该在的位置进行偏移
  • 使用top、left、bottom、right设置偏移长度
  • 流内其它元素当它没有偏移一样布局
position:absolute
  • 脱离常规流
  • 相对于最近的非static祖先定位
  • 不会对流内元素布局造成影响
position:fixed
  • 脱离常规流
  • 相对于窗口定位