CSS/CSS3常用知识点

188 阅读8分钟

本文记录一些常用的css知识点。具体内容转自参考文章。

前端知识点整理

1. 标准盒模型和IE(怪异盒模型)的区别。

标准(W3C)盒子模型:width = 内容宽度(content) + border + padding + margin

低版本IE盒子模型: width = 内容宽度(content + border + padding)+ margin

标准盒子模型盒子的height和width是content(内容)的宽高,而IE盒子模型盒子的宽高则包括content+padding+border部分。

2. CSS选择器有哪些?哪些属性可以继承?

  • id选择器(#content
  • 类选择器(.content
  • 标签选择器(div, p, span等)
  • 相邻选择器(h1 + p
  • 子选择器(ul > li
  • 后代选择器(li a
  • 通配符选择器(*)
  • 属性选择器(a[rel = "external"]
  • 伪类选择器(a:hover, li:nth-child

CSS继承属性

3. CSS优先级?

id选择器 > .选择器 > +选择器 > *

important > 行内 > 内联 > 外链

4. CSS3新增伪类选择器?

5. 如何居中div?

flex布局:justify-content: center; align-items: center

定位:绝对定位 + margin-left,绝对定位 + transform

6. display有哪些值?

7. CSS3有哪些新特性

  • 属性伪类选择器
  • 圆角(border-radius
  • 多列布局(multi-column layout
  • 阴影(shadow)和反射(reflect
  • 文字特效(text-shadow
  • 文字渲染(text-decoration
  • 线性渐变(gradient
  • 旋转(rotate)/ 缩放(scale)/ 倾斜(skew)/ 移动(translate
  • 媒体查询(@media
  • RGBA和透明度
  • @font-face属性
  • 多背景图

8. 纯CSS创建一个三角形?

9. 什么是响应式设计?响应式设计的基本原理是什么?

10. 如何清除浮动?什么是BFC?

  • 父级盒子定义高度(height
  • 最后一个浮动元素后面加一个div空标签,并且添加样式clear: both
  • 包含浮动元素的父级标签添加样式overflow为hidden/both
  • 父级div定义zoom

11. CSS优化、提高性能的方法

  • 多个css可合并,并尽量减少http请求
  • 属性值为0时,不加单位
  • 将css文件放在页面最上面
  • 避免后代选择符,过度约束和链式选择符 使用紧凑的语法 避免不必要的重复 使用语义化命名,便于维护 尽量少的使用!impotrant,可以选择其他选择器 精简规则,尽可能合并不同类的重复规则 遵守盒子模型规则

12. CSS预处理器/后处理器是什么?为什么要使用它们?

  • 预处理器,如:less,sass,stylus,用来预编译sass或者less,增加了css代码的复用性,还有层级,mixin,变量,循环,函数等,对编写以及开发UI组件都极为方便。
  • 后处理器,如:postCss,通常被视为在完成的样式表中根据css规范处理css,让其更加有效。目前最常做的是给css属性添加浏览器私有前缀,实现跨浏览器兼容性的问题。
  • 其它css预处理器语言:Sass, Less, Stylus, Turbine, Swithch css, CSS Cacheer, DT Css

13. ::before 和 :after中双冒号和单冒号有什么区别?解释一下这2个伪元素的作用?

  • 冒号(:)用于CSS3伪类,双冒号(::)用于CSS3伪元素。

  • ::before就是以一个子元素的存在,定义在元素主体内容之前的一个伪元素。并不存在于dom之中,只存在在页面之中。

  • :before:after 这两个伪元素,是在CSS2.1里新出现的。起初,伪元素的前缀使用的是单冒号语法,但随着Web的进化,在CSS3的规范里,伪元素的语法被修改成使用双冒号,成为::before ::after

14. 如果需要手动写动画,你认为最小时间间隔是多久?

多数显示器默认频率是60Hz,即1秒刷新60次,所以理论上最小间隔为1/60*1000ms = 16.7ms

15. rgba() 和 opacity 的透明效果有什么不同?

  • opacity 作用于元素以及元素内的所有内容(包括文字)的透明度

  • rgba() 只作用于元素自身的颜色或其背景色,子元素不会继承透明效果

16. display:inline-block 什么时候会显示间隙?

  • 有空格时候会有间隙, 可以删除空格解决

  • margin正值的时候, 可以让margin使用负值解决

  • 使用font-size时候,可通过设置font-size:0、letter-spacing、word-spacing解决

17. CSS样式中常使用 px、rem、em 在表现上有什么区别?

18. transform、animation的区别?

  • Transform: 它和width、left一样,定义了元素很多静态样式实现变形、旋转、缩放、移位及透视等功能,通过一系列功能的组合我们可以实现很炫酷的静态效果(非动画)。
  • Animation: 作用于元素本身而不是样式属性,属于关键帧动画的范畴,它本身被用来替代一些纯粹表现的javascript代码而实现动画,可以通过keyframe显式控制当前帧的属性值。

19. display: none 与 visibility: hidden 有什么区别?

  • 联系: 这两个属性的值都可以让元素变得不可见

  • 区别:

    • 从占据空间角度看display: none会让元素完全从渲染树中消失,渲染的时候不占据任何空间;visibility: hidden不会让元素从渲染树消失,渲染师元素继续占据空间,只是内容不可见。

    • 从继承方面角度看display: none是非继承属性,子孙节点消失由于元素从渲染树消失造成,通过修改子孙节点属性无法显示;visibility:hidden是继承属性,子孙节点消失由于继承了hidden,通过设置visibility: visible 可以让子孙节点显式。

    • 从重绘和重排角度看:修改常规流中元素的display通常会造成文档重排。修改visibility属性只会造成本元素的重绘。

    读屏器不会读取display: none;元素内容;会读取visibility: hidden元素内容。

20. link 与 @import 的区别?

  • link优于@import

21. display,float,position有什么关系?

22. 外边距折叠(collapsing margins)

  • 通过BFC来解决

23. 有哪几种隐藏元素的方法?

  • visibility: hidden 这个属性只是简单的隐藏某个元素,但是元素占用的空间任然存在。

  • opacity: 0 CSS3属性,设置0可以使一个元素完全透明。

  • position: absolute 设置一个很大的 left 负值定位,使元素定位在可见区域之外。

  • display: none 元素会变得不可见,并且不会再占用文档的空间。

  • transform: scale(0) 将一个元素设置为缩放无限小,元素将不可见,元素原来所在的位置将被保留,

  • <div hidden="hidden"> HTML5属性,效果和display:none;相同,但这个属性用于记录一个元素的状态。

  • height: 0 将元素高度设为 0,并消除边框。

  • filter: blur(0) CSS3属性,括号内的数值越大,图像高斯模糊的程度越大,到达一定程度可使图像消失。

24. 对BFC(块级格式化上下文:block formatting context)的理解。

BFC规定了内部的Block Box如何布局。一个页面是由很多个Box组成的,元素的类型和display属性,决定了这个Box的类型。不同类型的box,会参与不同的Formatting Context(决定如何渲染文档的容器),因此Box内的元素会以不用的方式渲染,也是就是说BFC内部的元素和外部的元素不会相互影响。

定位方案:

  • 内部的box会在垂直方向上一个接一个的放置
  • box垂直方向的距离由margin决定,属于同一个BFC的两个相邻Boxmargin会发生重叠
  • 每个元素margin box的左边,与包含块border box的左边相接触
  • BFC的区域不会与float box重叠
  • BFC是页面上的一个隔离的独立容器,容器里面的元素不会影响到外面的元素
  • 计算BFC的高度时,浮动元素也会参与计算

满足下列条件之一就可以触发BFC

  • 根元素变化,即html
  • float的值不为none(默认)
  • overflow的值不为visible(默认)
  • display的值为inline-block, tabke-celltable-caption
  • position的值为absolutefixed

25. 元素竖向的百分比设定是相对于容器的高度吗?

一般来说,子元素的百分比单位都是以父元素为依据。但是marginpadding例外。元素的height是相对于容器的高度,但是元素的marginpadding是相对于容器的宽度。

26. box-sizing 常用的属性有哪些?分别有什么作用?

  • box-sizing: content-box 默认的标准(W3C)盒模型元素效果
  • box-sizing: border-box 触发怪异(IE)盒模型元素的效果
  • box-sizing: inherit 继承父元素 box-sizing 属性的值

27. ::before 和 :after 中双冒号和单冒号有什么区别?

28. 常见的CSS布局有几种?

常见的CSS布局有: 固定布局流式布局弹性布局浮动布局定位布局marginpadding

29. 什么是回流(重排)和重绘以及其区别?

  • 回流(重排)reflow:当render tree中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变时而需要重新构建。
  • 重绘(repaint):当render tree中的一些元素需要更新属性,而这些属性只影响元素的外观,风格,而不会影响布局时,称其为重绘,例如颜色改变等。

触发重排(回流)的条件:

  • 增加或者删除可见的dom元素
  • 元素的位置发生了改变
  • 元素的尺寸发生了改变,例如边距,宽高等几何属性改变
  • 内容改变,例如图片大小,字体大小改变等
  • 页面渲染初始化
  • 浏览器窗口尺寸改变,例如resize事件发生时等

参考文章

css篇 - 100道近两万字帮你巩固css知识点

你未必知道的49个CSS知识点