CSS面试题

353 阅读8分钟

1. 介绍一下盒模型

标准盒模型:给元素设置width、height只包括content,不包含border、padding、margin

IE盒模型:给元素设置width、height包括content、border、padding,不包含margin

1.1 通过什么属性来控制盒模型

box-size:
content-box  ---------默认值,标准盒模型
border-box   ---------IE盒模型、怪异盒模型

2. CSS选择器有哪些

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

3. CSS有哪些属性可以继承,哪些不能继承

可继承的属性:font-size, font-family, color

不可继承的样式:border, padding, margin, width, height

4. CSS选择器优先级

!important:无穷大

内联样式:1000

id:0100

Class:0010

标签选择器:0001

结论:

  • 有!important声明的样式优先级最高
  • 计算权重,权重不可进位,权重大的优先级高,权重相同,按顺序后面的优先级高
  • 继承得到的样式的优先级最低

5. display有哪些值?说明他们的作用?

  • inline(默认)–内联
  • none–隐藏
  • block–块显示
  • table–表格显示
  • list-item–项目列表
  • inline-block-内联块

6.块元素、内联元素、内联块元素有什么区别

块元素:
 独占一行
 书写完会自动换行
 宽和高可以修改
内联元素:
 不独占一行
 书写完成后不会自动换行
 没有宽和高
 在浏览器显示会有一个空格间距

6.1 有哪些块级元素和内联元素

块级元素:div h1 p li table hr
内联元素:img span a input 

7. position的值?

  • static(默认):按照正常文档流进行排列;
  • relative(相对定位):不脱离文档流,参考自身静态位置通过 top, bottom, left, - right 定位;
  • absolute(绝对定位):参考距其最近一个不为static的父级元素通过top, bottom, left, right 定位;
  • fixed(固定定位):所固定的参照对像是可视窗口。

8. 外边距重叠问题

8.1 为什么会发生外边距重叠

  • 都是普通流中的元素且属于同一个 BFC
  • 没有被 padding、border、clear 或非空内容隔开
  • 两个或两个以上垂直方向的「相邻元素」
这里的「相邻元素」可能是兄弟节点也可能是父子节点,比如:
一个元素的 margin-top 和它的第一个普通流子元素的 margin-top;
一个元素的 margin-bottom 和它下一个普通流兄弟的 margin-top;
一个高度为 auto 元素的 margin-bottom 和它的最后一个子元素的 margin-bottom

8.2 如何避免外边距折叠

  • 避免外边距折叠只需破坏掉触发的条件即可,比如创建一个 BFC。
  • 给父元素加padding、border、overflow:hidden(BFC)

9. BFC

BFC指的是块级格式化上下文,一个元素形成了BFC之后,那么它内部元素产生的布局不会影响到外部元素,外部元素的布局也不会影响到BFC中的内部元素。一个BFC就像是一个隔离区域,和其他区域互不影响。

创建BFC

(1)根元素或包含根元素的元素
(2)浮动元素floatleft|right或inherit(≠none)
(3)绝对定位元素position=absolute或fixed
(4display=inline-block|flex|inline-flex|table-cell或table-caption5overflow=hidden|auto或scroll(≠visible)

作用:

(1) 清除元素内部浮动
(2) 解决外边距合并问题
	1.给父元素添加边框  border: 1px solid transparent
	2.触发bfc,如flost:left  或  display: inline-block
	3.加padding
	4.overflow:hidden

10. 清除浮动

1.父级div定义height
2.父级divoverflow:hidden
3.父级div也浮动,弹药加width
4.br标签:clear:both
5.结尾处加空div:clear:both
6.伪元素:
 .clearfix:after{
 		content: "";
        display: block;
        clear: both;
    }

11.水平、垂直居中

水平居中:
text-align:center
margin:0 auto
dispaly:flex;   justify-content:center
display: table-cell;
position:relative; left:0;right:0;margin:auto;
position:absolute; left: 50%;transform: translateX(-50%);
垂直居中:
line-heightheight值
dispaly:flex;  align-item:center
position:absolute; top: 50%;transform: translateY(-50%);
display: table-cell; vertial-align:middle

12. display: none;与visibility: hidden;的区别

  • 联系:它们都能让元素不可见
  • 区别:
    • display:none;会让元素完全从渲染树中消失,渲染的时候不占据任何空间;visibility: hidden;不会让元素从渲染树消失,渲染师元素继续占据空间,只是内容不可见
    • display: none;是非继承属性,子孙节点消失由于元素从渲染树消失造成,通过修改子孙节点属性无法显示;visibility: hidden;是继承属性,子孙节点消失由于继承了hidden,通过设置visibility: visible;可以让子孙节点显式
    • 修改常规流中元素的display通常会造成文档重排。修改visibility属性只会造成本元素的重绘。
    • 读屏器不会读取display: none;元素内容;会读取visibility: hidden;元素内容

13. CSS3有哪些新特性?

RGBA和透明度

background-image: 
	background-origin(content-box/padding-box/border-box)  
	background-size  
	background-repeat
    
文字阴影:text-shadow: 5px 5px 5px #FF0000;(水平阴影,垂直阴影,模糊距离,阴影颜色)
font-face属性:定义自己的字体

圆角(边框半径):border-radius 属性用于创建圆角

边框图片:border-image: url(border.png) 30 30 round

盒阴影:box-shadow: 10px 10px 5px #888888

媒体查询:定义两套css,当浏览器的尺寸变化时会采用不同的属性

14. CSS里的visibility属性有个collapse属性值?在不同浏览器下以后什么区别?

当一个元素的visibility属性被设置成collapse值后,对于一般的元素,它的表现跟hidden是一样的。

  • chrome中,使用collapse值和使用hidden没有区别。

  • firefox,opera和IE,使用collapse值和使用display:none没有什么区别。

15. position跟display、overflow、float这些特性相互叠加后会怎么样?

display属性规定元素应该生成的框的类型;position属性规定元素的定位类型;float属性是一种布局方式,定义元素在哪个方向浮动。

float 或者absolute定位的元素,只能是块元素或表格。

(1)首先我们判断display属性是否为none,如果为none,则position和float属性的值不影响元素最后的表现。

(2)然后判断position的值是否为absolute或者fixed,如果是,则float属性失效,并且display的值应该被 设置为table或者block,具体转换需要看初始转换值。

(3)如果position的值不为absolute或者fixed,则判断float属性的值是否为none,如果不是,则display 的值则按上面的规则转换。注意,如果position的值为relative并且float属性的值存在,则relative相对 于浮动后的最终位置定位。

(4)如果float的值为none,则判断元素是否为根元素,如果是根元素则display属性按照上面的规则转换,如果不是,则保持指定的display属性值不变。

总的来说,可以把它看作是一个类似优先级的机制,"position:absolute"和"position:fixed"优先级最高,有它存在的时候,浮动不起作用,'display'的值也需要调整;其次,元素的'float'特性的值不是"none"的时候或者它是根元素的时候,调整'display'的值;最后,非根元素,并且非浮动元素,并且非绝对定位的元素,'display'特性值同设置值。

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

当按百分比设定一个元素的宽度时,它是相对于父容器的宽度计算的,但是,对于一些表示竖向距离的属性,例如 padding-top , padding-bottom , margin-top , margin-bottom 等,当按百分比设定它们时,依据的也是父容器的宽度,而不是高度。

17. 什么是包含块,对于包含块的理解?

包含块(containingblock)就是元素用来计算和定位的一个框。

(1)根元素(很多场景下可以看成是<html>)被称为“初始包含块”,其尺寸等同于浏览器可视窗口的大小。

(2)对于其他元素,如果该元素的position是relative或者static,则“包含块”由其最近的块容器祖先盒的contentbox
边界形成。

(3)如果元素position:fixed,则“包含块”是“初始包含块”。

(4)如果元素position:absolute,则“包含块”由最近的position不为static的祖先元素建立,具体方式如下:

如果该祖先元素是纯inline元素,则规则略复杂:
•假设给内联元素的前后各生成一个宽度为0的内联盒子(inlinebox),则这两个内联盒子的paddingbox外面的包
围盒就是内联元素的“包含块”;
•如果该内联元素被跨行分割了,那么“包含块”是未定义的,也就是CSS2.1规范并没有明确定义,浏览器自行发挥
否则,“包含块”由该祖先的paddingbox边界形成。

如果没有符合条件的祖先元素,则“包含块”是“初始包含块”。