• 前端基础之CSS篇


    CSS篇

    基础

    1.字体:手机上最小字体是8px,PC上最小字体是12px。不要使用奇数单位来定义字体大小,否则在低端设备上可能会产生模糊。

    2.CSS优先级:important > 内联 > id选择器 > class选择器 > 标签选择器

    移动端 1px

    产生原因:对于 1dpr 的屏幕,1px 等于 1 物理像素;而对于 2 dpr 的屏幕,1px 等于 2 物理像素。而人肉眼看到的是物理像素,所以在 dpr 高的移动端上面会看到线变宽了。
    
    解决方案:一般根据伪元素 + 根据媒体查询进行缩放来实现。如果只兼容高版本 ios 的话,可以直接使用小数形式的 px 值;另外还可以使用 SVG + background-url 来实现。
    

    em、rem 和 vw

    em:

    定义:作为 font-size 单位时,代表父元素字体大小;作为其它单位时,代表自身字体大小;如果自身没有设置字体大小,则会查找父级,知道查找到浏览器设置的字体大小。
    
    优点:解决了等比缩放下字体不能很好展示的问题
    
    缺点:改变了父元素的字体大小之后,子元素可能会全部变化
    

    rem:

    定义:应用于非根元素时,相对于根元素字体大小;运用于根元素时,等比缩放
    
    优点:解决了移动端的屏幕宽度兼容,本质上是对于不同屏幕宽度进行缩放
    
    缺点:对于 PC 端兼容性不是很好;需要借助 js 动态修改根元素的字体大小;会丢失小数部分
    
    参考:github上面的hotcss库——移动端布局解决方案
    

    vw:

    定义:1vw 就是屏幕宽度的 1%(这个单位也叫做 viewport 单位)
    
    使用:postcss-px-to-viewport + postcss-loader
    
    缺点:没有解决 1px 的显示问题;没有 rem 灵活
    

    居中

    字体:

    text-align: center;
    line-height: xxxpx;
    

    行内元素:

    // 父元素
    text-align: center;
    
    // 子元素
    vertical-align: center;
    

    固定宽高:

    // 方法一:
     200px;
    height: 100px;
    left: 50%;
    top: 50%;
    margin-left: -100px;
    margin-top: -50px;
    
    // 方法二
     200px;
    height: 100px;
    left: calc(50% - 100px);
    top: calc(50% - 50px);
    

    宽高不定:

    // 使用 transform
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    
    // 使用 table 布局
    display: table-cell;
    text-align: center;
    vertical-align: middle;
    
    // flex
    display: flex;
    justify-content: center;
    align-items: center;
    
    // grid
    // 父元素
    display: grid;
    // 子元素
    align-self: center;
    justify-self: center;
    

    图片垂直水平居中:

    1.使用line-height和text-align: center
    2.display: table和display: table-cell
    3.使用position
    4.使用background和background-position
    

    布局

    文档流:

    定义:按照文档的顺序一个一个的显示,块元素独占一行,行内元素共享一行
    
    脱离文档流会发生什么:会打乱元素的排序规则,而且不会撑开父元素了
    

    表格布局:

    display: table;
    

    定位布局:

    relative:没有脱离文档流,相对于自己在文档流中的位置
    absolute: 脱离文档流,相对于设置了position为relative或者absolute或者fixed的父级元素
    

    浮动布局:

    定义:使用float属性,脱离文档流
    应用:横向二列布局,横向三列布局
    

    flex布局:

    // 横向
    justify-content: space-between;
    
    // 纵向
    align-items: center;
    
    // 填充
    flex: 1;
    

    grid(网格)布局

    教程:http://www.ruanyifeng.com/blog/2019/03/grid-layout-tutorial.html
    

    圣杯布局和双飞翼布局

    本质上是通过浮动实现的,建议使用 flex 实现,更好
    

    BFC

    定义:块级格式化上下文。文档流分为定位流、浮动流和普通流。BFC就是一个块级的普通流,它在里面有自己的一套渲染规则,决定了子元素如何布局,以及和其它元素之间的关系。
    作用:清除内部浮动(display: block; clear: both;);避免 margin 折叠;多列布局
    

    命名规范

    BEM 命名规范

    定义:块(block) + 元素(element) + 修饰符(modifier)
    优点:单一原则;模块化思想
    

    OOCSS 命名规范(面向对象CSS)

    理解:把不同元素里面通用的样式从模块、组件、对象中抽离出来,让它能在其它地方复用。
    

    SMACSS 命名规范(结构化css)

    把 css 分成了一下结构:
    1.Base: reset.css
    2.Layout: header、sidebar、i-header、i-sidebar等
    3.Module:module、article、c-article等
    4.Util:u-clearfix、u-ellipsis等
    5.State:is-active、is-hidden等
    6.Theme:button-large等
    

    Sass、Less、Stylus

    特点:
    1.选择符嵌套:反应层级和约束
    2.变量/运算/函数:减少冗余代码
    3.extend、mixin:代码片段重用,mixin更加强大
    4.循环:适用于复杂有规律的样式
    5.import:CSS 模块化
    

    层叠上下文

    定义:文档中的元素依据后来居上层叠在一起,浮动、z-index可以更改这种层叠顺序
    

    sticky

    定义:sticky元素的相对偏移是相对于离他最近的具有滚动框的祖先元素,如果没有则是 viewport
    
    注意:多个粘性元素共用一个粘性约束矩形的时候,滚动的时候会一个一个发生重叠
    

    line-height

    理解:在inline-box模型中,每行文字都由一个line-box包裹,它的高度就是行高。它的高度决定了inline-box的高度。
    

    盒模型

    定义:盒模型是由内容、内边距、边框、外边距组成(盒子的宽度是指内容的宽度)
    content-box:标准盒模型,盒子的宽度不包括边框和内边距(这个content就是内容)
    border-box:怪异盒模型,盒子的宽度包含边框和内边距(这个border就是指包含border和padding)
    

    flex

    flex-direction: 决定主轴的方向,即项目的排列方向
    flex-wrap: 如果一条轴线排不下,如何换行
    flex-flow: flex-direction 和 flex-wrap 的简写形式
    justify-content: 定义了主轴上的对齐方式
    align-items: 定义了在交叉轴上的对齐方式
    align-content: 定义了很多轴线的对齐方式
    order: 定义了项目的排列顺序
    flex-grow: 定义了项目的放大比例
    flex-shrink: 定义了项目的缩小比例
    flex-basis: 项目占据的主轴空间
    flex: 是flex-grow, flex-shrink, flex-basis的简写
    align-self: 表示单个项目与其他项目的不一样的对齐方式
    
    flex: 0 1 auto: 当存在剩余空间的时候,不会放大;当空间不足的时候,会缩小
    flex: 1: 当存在剩余空间的时候,会放大(此时flex-basis为0%,在计算多余空间的时候,按父元素的0%计算)
    flex: auto: 当存在剩余空间的时候,会放大(此时flex-basis为auto)
    flex: none: 当空间不足的时候,不会缩小
    

    回流和重绘

    回流:浏览器会把 html 解析成 dom树,把 css 解析成 cssdom树,他们一起就叫做 render tree。当render tree 改变的时候,就会触发回流。比如说:改变元素的大小、改变元素的内容、改变窗口的大小等,他们会触发render tree的改变。
    
    重绘:生成 render tree 之后浏览器就会把它绘制到 ui 上面去,如果render tree没有改变,但是其他css改变的时候,就会触发重新绘制,叫做重绘。比如说:颜色、背景图、透明度等。
    

    开启 GPU 加速

    方法一:transform: translateZ(0);
    
    方法二:will-change: transform;
    

    postcss

    常用的 postcss: autoprefixer、postcss-cssnext、postcss-pxtorem

  • 相关阅读:
    软件质量保证(SQA)
    软件质量保证(SQA)
    在应用程序中使用 Ajax 的时机
    3月18日工作日志88250
    Eclipse 4.0计划
    3月15日工作日志88250
    Eclipse 4.0计划
    3月18日工作日志88250
    在应用程序中使用 Ajax 的时机
    3月15日工作日志88250
  • 原文地址:https://www.cnblogs.com/yangzhou33/p/13734538.html
Copyright © 2020-2023  润新知