继承系列
- 字体、文本、表格布局、列表、光标、元素可见性(visibility)、还有一些不常见属性(speak、page)
- 不可继承:除了以上七点的属性都不具备继承,比如:position、display、浮动等icon全解析
- 可显式使用inherit来进行继承、all:inherit继承所有不好用
选择器权重
图标
- 引入方式:img、area实现一张图片多个点击区域、Sprite
- 彩色图标:iconfont-symbol方式
- 纯色CSS实现的小图标:https://cssicon.space/
- SVG:图像中的文本是可选、可搜索的
- 使用方式可直接将代码放入页面,维护性不太好
:请求数增加,对服务负载和加载不好
- background-image:背景调用,最好编译成base64,避免请求
- SVG Sprite
彻底弄懂前端动画世界
CSS3 有哪些新特性
- 圆角、阴影和反射 (Shadow\Reflect)、文字特效、文字渲染、线性渐变、旋转 (transform)缩放, 定位, 倾斜, 动画, 多背景
-
移动端响应式布局技巧
设备像素
- 固定的物理单位,比如iphone x的像素分辨率为1125 * 2436
- 通常说的4X显示屏指的是4096 * 2160
- 设备独立像素
- iphone x的逻辑分辨率为 375 * 812就是设备独立像素
- 一个设备独立像素可能包含多个物理像素,包含的越多,显示越清晰
- CSS像素
- 在不缩放的情况下,1个CSS像素就等于1个设备像素
- 在缩放200%的情况下,缩放的是CSS像素,1个CSS像素就等于4个设备像素(宽2 * 高2)
- PPI
- 指每英寸的物理像素数,iphone x 5.8 英寸
- ppi = Math.sqrt(1126 1125 + 2436 2435) / 5.8 = 463ppi
- DPR:devicePixelRatio
- 指的是物理像素和设备独立像素的比,即1独立像素由多少物理像素渲染
- devicePixelRation = 物理像素 / 设备独立像素
- 设计稿
- 参照iphone5:320 568 dpr = 2.0 = 640 1136
- 参照iphone6:375 667 dpr = 2.0 = 750 1334
- 参照iphoneX:375 812 dpr = 3.0 = 1125 2436
- layout viewport与visual viewport
- viewport缩放适配
- 媒体查询@media
- @media screen and (min-width:375px) -> 可以缩写为@media (min-width:375px)
- vw弹性适配
- 动态rem适配
- 弹性flex适配
CSS工程化和框架应用
经曲面试真题解析
线性渐变:linear-gradient
- 不控制方向,由某个颜色到某个颜色,默认垂直方向
- 通过角度控制方向,用to进行表示
- 通过方位控制方向,方位最终也会转变为角度
background-size的常见属性及区别
- 取值情况:length、percentage、auto、cover、contain
- background-size:cover(完全覆盖,等比例缩放,可能会出现裁剪的表现)
- background-size:contain(等比例缩放,只要有一边触碰到容器,则不再进行缩放,所以可能会出现留白)
background-origin:图片显示位置
- 主要针对图片盒子有边框和padding时图片开始的显示位置
- background-origin:border-box:从边框开始显示
- background-origin:content-box:从内容开始显示
- background-origin:padding-box:从内填充的地方开始显示
background-clip:图片裁剪
- 主要针对图片盒子有边框和padding时图片开始的显示位置
- background-origin:border-box:从边框往外开始裁剪
- background-origin:content-box:从内容往外开始裁剪
- background-origin:padding-box:从padding往外开始裁剪
border-radius:圆角
- 分为水平半径和垂直半径,起点都在左上角
- 可以取四个值:顺时针方向:左上、右上、右下、左下
- 四个值:按顺时针四个方向来计算
- 三个值:左上、右上和左下、右下
- 两个值:左上和右下、右上和左下
- 一个值:四个圆角相等
box-shadow
- 盒子阴影:X轴水平、Y轴垂直
- 第一个值X轴偏移、必填
- 第二个值Y轴偏移、必填
- 第三、四个值模糊半径
- 第五个值颜色
- inset表示内阴影
- 多个值逗号分隔,多重阴影
text-shadow
- 与box-shadow的区别:没有inset,没有内阴影
- 四个值:X轴、Y轴、阴影、颜色
- 偏移值也必填,无值用0填充
- 多个值逗号分隔,多重阴影
filter:图像处理
- 常用的为:blur()模糊、opacity()透明度,其它的图形效果一般出图时已经做好了
- brightness、contrast、grayscale、hue-rotate、invert、saturate、sepia、drop-shadow
clip-path
- 也可以绘制一个圆:clip-path:circle(50%);
CSS机制At-rule
- 常规规则:@charset @import @namespace
- 嵌套规则:@document @font-face @keyframes @media @page @supports
CSS变量的语法和用法
- 变量定义:—变量名,大小写敏感,不能包含$,[,^,(,%等字符,其它都可以,中文、数字,日文都可以
- 变量使用:var(—变量名,参数二为如果该变量不存在,就会使用这个默认值)
- 变量值为字符串,可以与其它字符串拼接:—str:’hello’,var(—str)’ world’
- 变量值是数值,不能与数值单位直接使用:—num:20,margin-top:calc(—num * 1px)
- 变量值带单位,直接使用:—单位:20px,margin-top:—单位;
- 同样名称的变量时,变量覆盖规则由CSS选择器的权重决定
- CSS属性名不能为变量,只能属性值
- 可以通过POSTCSS-cssnext插件转换变量写法为兼容性更好的写法
BEM
- B:模块名、E:元素、M:修饰:比如顶部操作条(top_operation_bar__box—icon)
- __连接模块名,—连接修饰符
CSS选择器权重
- !important(10000) > 行内(1000) > id(100) > class(10) > 标签选择器(1) > 通配符 > 继承 > 浏览器默认
选择器的命名
- 驼峰命名:userInfo,帕斯卡命名法:UserInfo,匈牙利命名法:user_info
AMCSS样式写法
- 与传统class写法不同,AMCSS使用属性名和属性值的写法,使用属性选择器进行匹配
- |
各种布局实战
- 居中布局
- 水平居中布局:七种方案
- text-align:center;
- margin:0 auto;
- 父text-align:center,子display:inline-block;
- 定位子绝父相;
- flex; ```javascript
- 水平居中布局:七种方案
- 水平居中: 给 div 设置一个宽度, 然后添加 margin:0auto 属性 div { width: 200px; margin: 0auto; } -
水平居中, 利用 text-align:center 实现 .container { background: rgba(0, 0, 0, 0.5); text-align: center; font-size: 0; } .box { display: inline-block; width: 500px; height: 400px; background-color: pink; } ```
- 垂直居中布局:七种方案
- line-height;vertical-align:middle;父元素设置为table-cell、vertical-align;定位子绝父相;
- position:absoulte;top:0; bottom:0; margin: auto;flex;
- 水平垂直居中:多种方案
- flex;定位;table-cell;定位包含三种;
- 定位通过margin负值,或者transform:translate进行变换;或者四个方位为0,margin:auto即可;
- 垂直居中布局:七种方案
- 多列布局:花瓣网
- 两列布局:左边定宽,右边自适应;右边两边固定宽度;七种
- float + margin、float+margin(fix)、float+overflow(利用BFC实现)、table+table-cell、position绝对定位
- flex、Grid
- table-cell相当于设置为td,父元素设置为table,table天然具有子元素自适应
- 三列布局:
- 左边两列固定宽度,右边一列自适应,也有可能两边固定宽度,中间自适应
- 实现方案和两列布局原理基本一致
- 圣杯布局:一种
- 圣杯布局和三列布局的区别为,正常三列布局为左中右,圣杯为了让重要的内容优先显示,所以布局为中左右,中宽度自适应,左右固定列宽
- 双飞翼:一种
- 两列布局:左边定宽,右边自适应;右边两边固定宽度;七种
- 全屏布局
- 等分布局
- float + 百分比手动计算,会产生的问题子元素浮动,父元素高度塌陷(兼容性好)
- 解决方法:1,给父元素一个固定高度
- ovefflow:hidden:通过触发BFC把浮动的高度给计算进去:缺点会把内容也溢出隐藏
- clear:both:在浮动子元素后面添加一个DIV,缺点,需要手动添加一个div
- 项目中最常用的:封装一个class:clearfix,通过伪元素::after,原理和clear:both一致,不需要添加一个DOM元素,.clearfix::after { content:””; display:block; clear:both }
- table
- flex
- float + 百分比手动计算,会产生的问题子元素浮动,父元素高度塌陷(兼容性好)
- 等高布局:一行被划分成若干列,每一列的高度是相同的值
- 利用table、table-cell实现,table具有高度自动等高效果,
- 利用margin-bottom、padding-bottom正负值相互抵消来实现
- 利用 flex 布局中项目 align-items 属性默认为 stretch, 如果项目未设置高度或设为 auto,将占满整个容器的高度的特性, 来实现多列等高
- 全屏布局:一种
- 利用fixed布局
- 等分布局
定位和层叠上下文
- 定位的原理和常见值:
- static:一般用于覆盖继承过来的position值
- realtive
- fixed:正常情况下根据浏览器窗口进行定位,但当祖先元素中存符合以下一个条件时,固定定位会相对于该元素进行定位
- transfrom属性值不为none;
- transform-style:preeserve-3d
- perspective值为不none
- will-change属性指定了上面3个CSS属性中的任意一个
- absoulte:会脱离文档流,相对于除stitac值的定位元素进行定位
- sticky:粘性定位,像relative和fixed的结合,元素可以固定于页面指定位置,但并不一定始终固定位置
- 四个方位值必须设定一个才会生效,定位参考对象距离其最近的overflow属性值为visible的具有滚动答的祖先元素,元素不会脱离文档流
- 默认相对定位,当达到临界值时则为fixed固定定位
- 层叠顺序:
- 在当前层叠上下文元素比较才有意义,不同层叠上下文不具可比性(子元素层叠再高还是由低级决定)
- 同一个层叠上下文顺序:背景或边框 < 块级元素 < 浮动元素 < 行内、行内块元素 < position
- 同级后来居上
- 层叠产生条件:
- position + z-index:数值、html根层叠、
- C3属性:display:flex + z-index、transform、opacity、filter
BFC
- 实现了一个独立隔离的容器,不受其它元素影响
盒子模型
- 正常盒子模型:box-sizing:content-box
- width=width
- box-sizing:border-box
- width=(width + padding + border)
- margin两种盒模型都不计算到宽度内
伪类与伪元素
- 伪类本质是为了补充CSS选择器的不足
- 伪类与伪元素一个单冒号,一个双冒号
- 伪元素:::selection ::placeholder ::backdrop ::before ::after ::first-letter ::first-line
- 伪元素是无法选中的,真的文字可以选中,结合content使用
CSS单位
- px:固定单位
- %:相对单位,参照父元素宽度
- rem:相对单位 参照根元素字体大小,1rem = root font-size
- 为了方便计算,一般将根元素size设为100,或10
- 移动端响应式:rem || vw
- vw、vh:相对单位,根据视口来改变,把视口分为100等份
- em:相对单位,1em等于父元素的字体大小
项目
- QQ音乐布局实战
- 布局:flex
- 响应式:viewport、@media
- 单位:html:vm,内容:rem
- sass预处理器:变量,嵌套,minixs,extend,easy sass
画一个圆
- border-radious
- clip-path: circle(50%)
项目中样式重置
- css reset 和 normalize.css 有什么区别
- reset是将各个浏览器自带的样式重置掉
- normalize是让各个浏览器不同的样式尽量保持一致的显示效果
遇到的兼容性问题
- chrome对于12号以下的字体,按12来显示,通过transform:scale(0.8)来缩小
- 统一getAttribute()获取自定义属性
base64优缺点
- 优点:节约一个HTTP请求
- 缺点:体积比原图大1/3、无法直接缓存,只能缓存CSS文件、增加HTML CSS页面的解析时间
- 为什什么体积会大1/3:
CSS模块化
- 全局重置样式:http://meyerweb.com/eric/tools/css/reset/
- 全局通用样式类,比如color,clearfix,text-overflow等常用类
- 全局Sass通用变量
- 滚动条通用样式
- 组件库覆写样式