基础CSS篇(四)

105 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第18天,点击查看活动详情

谈谈对BFC的理解是什么?

书面解释:BFC(Block Formatting Context)这几个英文拆解

  • Box: CSS布局的基本单位,Box 是 CSS 布局的对象和基本单位,直观点来说,就是一个⻚面是由很多个 Box 组成的,实际就是上个问题说的盒模型
  • Formatting context:块级上下文格式化,它是⻚面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用

简单的来说,它就是一块独立的区域,让处于BFC内部的元素与外部的元素互相隔离开来

那么是如何形成的呢?BFC触发条件:

  1. 根元素,即HTML元素
  2. position: fixed/absolutefloat
  3. 不为noneoverflow不为visible
  4. display的值为inline-block、table-cell、table-caption 作用是什么? 防止margin发生重叠 两栏布局,防止文字环绕等
    防止元素塌陷

为什么有时候人们用translate来改变位置而不是定位?

translate()是transform的一个值。改变transform或opacity不会触发浏览器重新布局(reflow)或重绘(repaint),只会触发复合(compositions)。而改变绝对定位会触发重新布局,进而触发重绘和复合。transform使浏览器为元素创建一个 GPU 图层,但改变绝对定位会使用到 CPU。因此translate()更高效,可以缩短平滑动画的绘制时间。而translate改变位置时,元素依然会占据其原始空间,绝对定位就不会发生这种情况。

伪类和伪元素的区别是什么?

伪类(pseudo-class)是一个以冒号(:)作为前缀,被添加到一个选择器末尾的关键字,当你希望样式在特定状态下才被呈现到指定的元素时,你可以往元素的选择器后面加上对应的伪类。

伪元素用于创建一些不在文档树中的元素,并为其添加样式。比如说,我们可以通过::before来在一个元素前增加一些文本,并为这些文本添加样式。虽然用户可以看到这些文本,但是这些文本实际上不在文档树中。

区别

其实上文已经表达清楚两者区别了,伪类是通过在元素选择器上加入伪类改变元素状态,而伪元素通过对元素的操作进行对元素的改变。
我们通过 p::before 对这段文本添加了额外的元素,通过 p:first-child 改变了文本的样式

谈谈你对flex的理解?

web应用有不同设备尺寸和分辨率,这时需要响应式界面设计来满足复杂的布局需求,Flex弹性盒模型的优势在于开发人员只是声明布局应该具有的行为,而不需要给出具体的实现方式,浏览器负责完成实际布局,当布局涉及到不定宽度,分布对⻬的场景时,就要优先考虑弹性盒布局

CSS的动画与过渡问题

CSS动画animation

CSS过渡transition