box-sizing 盒类型

该属性是告诉浏览器是以什么盒模型展示的

IE用的是border-box

计算方式是外边距+内边距+内容=宽度(高度)

而像谷歌浏览器之类的用的是content-box

计算方式是容器的宽度或者高度

box-sizing: content-box; // 告诉浏览器是以content-box方式计算

border-box // 告诉浏览器是以border-box方式计算


css样式优先级

!important > 内联 > id > 类 > 标签 > 通配符 > 默认样式 > 继承样式


letter-spacing 字间距

该属性控制字符之间的距离,字符之间的字符间距,默认值为0

该属性支持三种类型的数值

px(像素)

em(相对值,相对于原来设置的值,如果原来的值为16px,那么1em就是16px,可以理解为倍数)

rem(和em类似,不过它相对的是html元素,而em是相对于它本身)

例如:

letter-spacing: 6px;


columns

用于指定列宽和列数

例如:

columns: 100px 3; // 指的是列宽为100px,列数为3

column-gap

用于列与列之间的间隔

column-gap: 30px;

column-rule

用于指定列之间的宽度和样式,以及颜色(列的边线)

column-rule: 6px dashed #ccc;

可拆分为

column-rule-width和column-rule-style和column-rule-color

column-span

指定元素应横跨多少列

column-span: 3;

all为横跨所有列


media 媒体查询

媒体查询常用于响应式布局,为不同屏幕设置不同的样式

@media(max-width:768px){} // 当屏幕最大宽度只有768px时应用其下的设置

检测是否有将系统的主题色设置为亮色或者暗色(安卓开启深色模式也有效,可以用于定义夜间模式等等)

@media (prefers-color-scheme: dark){} // 暗色

@media (prefers-color-scheme: light){} // 亮色


only元素选择

.app:only-child // 选择唯一性子元素的.app类元素(必须是唯一性)

.app:only-of-type // 选择指定类型(.app)的子元素(只要是父元素下有.app类就会选择)


before和after插入(伪类)

.app:before // 在app类的内容之前插入新的内容

.app:after // 在app类的内容之后插入新的内容


nth 元素选择(伪类)

.app:nth-child(2) // 选择app类的父元素下的第2个子元素

.app:nth-last-child(2) // 选择app类的父元素下的第2个子元素中的带有.app元素

.app:nth-of-type(2) // 选择属性app类的父元素下的第2个子元素中的全部同类型的元素

.app:nth-last-of-type(2) // 选择app类的父元素下倒数的第2个子元素中的带有.app元素


calc 计算属性

动态计算长度

width: calc(80% + 100px); // 宽度等于父元素的80%宽度加上100px


css单位:px(像素),em(相对于自身元素),rem(相对于根元素,html元素),vw(1vw等于视口宽度的1%,100vw就是视宽100%),vh(1vh等于视口高度的1%,100vh就是视高的100%)

注意:vw,vh是相对于视口,包括滚动条,而100%不包括滚动条,因此100%和100vw(vh)有可能是不一致的


IFC全称Inline Formatting Contexts,中文翻译为行内格式化上下文

只要块级元素中仅包含内联级元素就会触发IFC机制,例如:

<div id="app">
    <span>
        hallo
    </span>
</div>

特性:

可以根据IFC容器的属性值,对子元素进行排列,例如text-align: center;

子元素使用float浮动的优先排列

上下外边距不生效,但是左右外边距生效,IFC机制就是只计算横向样式,不计算纵向样式

IFC机制常用于文本行高不同,元素垂直显示的问题


缓动动画公式:(目标值 - 现在的位置) / 10


css3原生变量

声明变量

#app{
    --textmax: 10px;
}

textmax变量(属性)目前没有任何含义,因此,css变量也叫做css自定义属性,变量名大小写敏感

var()函数用于读取变量的值,例如:

#app{
    font-size: var(--textmax, 13px);
}

var()的第二个参数是表示变量的默认值,如果这个变量不存在,就使用这个默认值

注意:和less那些css预处理器不同,css原生变量只能用于属性值,不能用于属性名

如果变量值是字符串,可以进行拼接,而且变量带有单位,不可写为字符串

如果变量值是数值,需要calc()函数才能进行拼接,例如:

#app{
    font-size: calc(var(--textmax, 13px) + 10px);
}

作用域

css变量的优先级和css选择器的优先级是一样的, id > 类 > 标签 > 通配符


粘性布局

position: sticky;

该属性值还处在实验性期间,因此兼容性差的不堪入目

position: -webkit-sticky;
position: sticky;
top: 20px;

当元素距离视窗顶部的距离大于20px的时候,以relative定位显示,当小于20px的时候,以fixed定位

触发生效要有top, right, bottom 或 left其中一个值

注意:当left和right同时设置时,left的优先级高,当top和bottom同时设置,top的优先级高

而且使用sticky的元素的父节点的overflow属性必须是visible,因为如果设置hidden,那么就无法滚动,就无法生效了,而设置其他relative|absolute|fixed会导致其相对于父元素,而不是相对于视窗定位了

动画间隔时间公式,因为大多数显示器默认频率是60Hz,即1秒刷新60次,因此最小间隔为1/60*1000ms = 16.7ms


Bootstrap

由twitter提供,支持Sass变量,v5版本移除JQuery依赖(所以使用v5版本不需要再导入jQuery了)

使用简单,直接用类名覆盖样式,就可以使用现成由Bootstrap提供的样式

Bootstrap响应式布局用的@media(media query / 媒体查询)

如果不喜欢部分Bootstrap的样式,也可以自定义(使用sass修改变量)


css Modules(class默认局部生效,解决css冲突)

CSS Modules不是官方规范,也不是浏览器提供的特性,而是依赖于构建工具(例如webpack)

class类名是动态生成的,唯一的,并且准确地对应源码的类样式,样式复用通过composes关键字实现

例如:

.test{
    color: #ccc;
}
.demo{
    composes: test;
    box-sizing: border-box;
}

layout viewport,visual viewport,ideal viewport

layout viewport是网页布局的区域,因此layout viewport可能大于视窗区域,也可能小于,当缩放为100%时,layout viewport宽度等于视窗的宽度,一般来说不会发生改变,除非布局元素被清除了

visual viewport是视窗区域,这个区域随缩放改变

ideal viewport:每个设备的ideal viewport有可能不同,可以理解为设备区域,这个可以手动设置,例如:

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">

device-width为视窗大小,也就是visual viewport

上面例子在100%缩放中,ideal viewport的大小(不是指单位)等于设备物理大小

ideal viewport可以通过执行window.screen.width/window.screen.height获得

在我这里宽度为1463px,那么表示无论设备的物理像素多大,在这里就是用1463px表示

例如:

<div id="app"></div>

body{
    padding: 0;
    margin: 0;
}
#app{
    width: 1463px;
    height: 10px;
    background-color: #000;
}

可以发现app元素布满了视窗宽度,说明在该设备中css的1463px等于100%

css的1px不等于设备中的1px,css的1px和设备的尺寸相关,和视窗的缩放有关(实质上都和devicePixelRatio有关)

devicePixelRatio(比例) = device pixels(设备物理像素) / device-independent pixels(设备独立像素,例如css的像素)

devicePixelRatio比例可直接通过执行window.devicePixelRatio得到(在我这边为1.75,说明css的1px等于设备的1.75px)


clamp(),限制一个值在最小值,最大值之间,有3个参数,最小值,首选值,最大值

width: clamp(1rem,10px,5rem);

当首选值在最大和最小之间时,选择首选值

当首选值比最大值大时,使用最大值

当首选值比最小值小时,使用最小值