Skip to content

CSS 基础

css盒模型

盒子模型由文本内容、内边距、边框和外边距组成

  • 标准盒子模型宽度等于文本内容加外边距加边框加内边距 box-sizing:content-box
  • IE盒子模型宽度等于文本内容加外边距 box-sizing:border-box

block inline inline-block区别

  • block 独占一行 多个相同换行 设置宽度、高度、内外边距
  • inline 不会独占一行 多个相同并列直到父元素宽度不够换行 设置宽度和高度无效 水平方向内外边距会有距离垂直方向则没有距离
  • inline-block 将对象呈现为inline对象但是对象内容呈现为block 不会独占一行 可以设置宽度、高度和内外边距

都使用过哪些伪类

  • 动态伪类 :link :active :focus :hover :visited
  • 结构伪类 :first-child :last-child
  • 否定伪类 :not
  • 状态伪类 :enabled :disabled :checked

css选择器

  • 选择器类型 id class 标签 通配符
  • 选择器优先级 important > 内联样式 > id > class > 标签 > 通配符

CSS样式继承

  • 文字样式例如font、font- family、 font-size、font-style、font- weight
  • 文字修饰例如color text-indent text-align line-height word-space lettter-space
  • 元素中的line-height为固定值时则直接继承,如果为数字则按照自己的字体大小计算,如果为百分比则按照父级大小计算。

flex布局

  • fex:1等同于设置fex:1 1 0%
  • flex:none等同于设置flex:0 0 auto
  • flex属性是flex-grow、 flex-shrinks flex-basis三个属性的缩写
    • flex-grow:定义项目的的放大比例;
    • flex-shrink:定义项目的缩小比例;
    • flex-basis:定义在分配多余空间之前,项目占据的主轴空间 (main size),浏览器根据此属性计算主轴是否有多余空间,

BFC,解决了什么问题以及怎么触发 BFC

BFC是一个独立的空间,父级元素添加overflow:hidden来解决问题。它可以解决如下问题

  • 解决margin塌陷问题
  • 解决浮动问题
    • 父级添加overflow
    • 父级添加clearfix
    • 父级跟随浮动

清除浮动的几种方式?各自的优缺点?

  • 额外标签法:在需要清除浮动的元素前面加上空的div并设置clear为both
    • 优点:通俗易懂,容易掌握
    • 缺点:会添加很多无意义的空标签,有违结构与表现的分离,在后期维护中将是噩梦
  • 父级div定义overflow:hidden或者overflow:auto
    • 优点:简单,代码少,浏览器支持好
    • 缺点:不能和position配合使用,因为超出的尺寸的会被隐藏(出现滚动条)
  • 父级div定义伪类:after和zoom(用于非IE浏览器)
    • 优点:浏览器支持好,不容易出现怪问题(目前:大型网站都有使用,如:腾迅,网易,新浪等等)。
    • 缺点:代码多,要两句代码结合使用,才能让主流浏览器都支持

水平居中的四种方法

  • 固定宽高
    • postion:absolute;left:50%;top:50%;margin-left:-150px;margin-top:-150px;
    • postion:absolute;left:0;top:0;left:0;bottom:0;margin:auto;
  • 固定宽度
    • display:table-cell;vertical-align:middle;margin:auto
  • 不固定宽高
    • postion:absolute;left:50%;top:50%;transform:translate(-50%,-50%)
    • 父元素display:flex;justify-content:center;align-items:center;

三栏布局

  • flex
  • float
  • postion
  • table-cell

隐藏元素的方法

  • display:none 元素在页面上消失不占据空间
  • opacity:0 设置元素透明度 元素不可见 占据位置空间
  • visibility:hidden 让元素消失 占据元素位置

REM、EM和PX的区别

  • PX 绝对单位长度
  • REM相对单位根据根节点的font size值设置
  • EM根据父元素的放得下只设置

rgb与rgba的区别

rgb和rgba都代表颜色,A代表alpha透明度(0-1)之间显示

static relative absolute fixed sticky区别

- static 默认定位 从上到下 从左到右
- relative 相对定位 标准流中位置进行偏移 标准所占空间保留
- absolute 绝对定位 移出标准流 后面元素占挤空间 若该元素所有父级设置position/ transform就靠近改父级偏移否则靠近浏览器窗口偏移
- fixed 固定定位 以浏览器窗口位置偏移
- sticky 粘性定位 元素固定在距离浏览器一定位时固定在此处否则在正常文档流中

优雅降级与渐进增强

- 渐进增强 保证最基本的功能
- 优雅降级 构建完整的功能再利用浏览器进行兼容
- 渐进增强是向上兼容而优雅降级是向下兼容一般采用向下兼容

CSS面试

什么是reflow(回流)

reflow 的本质就是重新计算 layout树。 当进行了会影响布局树的操作后,需要重新计算布局树,会引发 layout。 为了避免连续的多次操作导致布局树反复计算,浏觉器会合并这些操作,当JS代码全部完成后再进行统一计算。所以,改动属性造成的 reflow 是异步完成的。 也同样因为如此,当JS获取布局属性时,就可能造成无法获取到最新的布局信息。 浏览器在反复权衡下,最终决定获取属性立即 reflow

什么是replain(重绘)

repaint 的本质就是重新根据分层信息计算了绘制指令。 当改动了可见样式后,就需要重新计算,会引发 repaint。 由于元素的布局信息也属于可见样式,所以 reflow 一定会引起 repaint.

为什么transform效率高

因为 transform 既不会影响布局也不会影响绘制指令,它影响的只是渲染流程的最后一个「draw」阶段由于 draw 阶段在合成线程中,所以 transform 的变化几乎不会影响渲染主线程。反之,渲染主线程无论如何忙碌,也不会影响 transform 的变化

响应式设计

  • 媒体查询
  • 百分比
  • vw/vh
  • rem

CSS性能优化

  • 内联首屏关键CSS
  • 异步加载CSS
  • 资源压缩
  • 合理使用选择器
  • 减少使用昂贵的属性
  • 不要使用@import

Released under the MIT License.