前端面试指南之CSS面试题总结

693 阅读4分钟

一、设置元素垂直水平都居中的方法有哪些?

针对行内元素,利用text-alignline-height

 { text-align : center; line-height: "父元素height"}

针对块级元素:

(1)利用flex布局:

{display : flex;  justify-content: center;  align-items: center;}

(2)利用absolute定位;

(3)设置四周的marginpadding

二、什么是BFC容器?其有何特性?如何生成BFC容器?

BFC即块级格式化上下文(BlockFormattingContext),可看做页面上一个相对独立的布局容器

其特性有:

(1)布局环境独立。内部元素不受外部元素影响,也不会影响外部元素布局;

(2)内部的块盒与行盒都会沿着其父元素的边框垂直排列布局;

(3)内部元素间垂直距离由其margin决定,两个内部元素垂直方向上相邻的margin会发生重叠;

(4)计算BFC的高度时,内部的浮动元素也需算在内;

(5)BFC区域不会与浮动元素重叠(可利用此特性来清除浮动)。

生成方式有:

(1) 根标签<html>本身为BFC容器;

(2)float属性不为none的元素;

(3)position属性为absolutefixed

(4)display属性为inline-block、flex、inline-flex的元素;

(5)overflow不为visible的块元素。

三、CSS选择器的权重值怎么排列?

整体权重顺序为:!important > 内联样式 > 内部样式 > 外部样式 > 浏览器样式

比较方法有:1. 权重值比较法;2. 四零对比法。

四、标准盒模型和怪异盒模型有何区别?

浏览器默认使用标准盒模型,标准盒子会被设置的padding撑开,而怪异盒子的大小不会。

标准盒模型 box-sizing:content-box

"盒子总宽度"= margin-left + margin-right + border-right + border-left
    + padding-right + padding-left + width("内容区宽度")
//高度同理

怪异盒模型 box-sizing:border-box

"盒子总宽度"= margin-left + margin-right + width("内容区宽度") 
	= margin-left + margin-right+ border-right + border-left + padding-right + padding-left 	
//高度同理

五、什么是标准文档流、破坏文档流和脱离文档流?

标准文档流:各元素在文档中按照块盒行盒,从上到下、从左到右正常排序的文档流

破坏文档流:先让元素强制按照指定的方向进行移动,到达指定的位置,但元素仍占有其在标准文档流中原位置。可以通过设置负值margin的方法来实现

脱离文档流:使元素从标准文档流中脱离出来,按照自己的规范进行排列与移动。脱离文档流的元素不再占有标准文档流中的位置。可以通过设置浮动、设置绝对定位或固定定位的方法来实现。

六、如何解决浮动带来的高度塌陷问题?

高度塌陷问题会导致浮动元素的父元素高度无法被子元素撑开,可以通过如下方法来解决:

(1)在父元素上设置伪元素来清除浮动:

::after {
	content: "";
	display: block;
	clear: both;
}

(2) 为父元素设置overflow: hidden属性;

(3) 为父元素设置display: inline-block属性;

(4) 在浮动元素后添加带有clear属性的<br />:

<br clear="all">
<!--兄弟块元素无法与浮动元素并排显示-->

(5) 为兄弟元素添加clear属性:

"兄弟元素" {
	clear: both;
}

七、src属性和href属性有何差别?

href表示的是超文本的引用,一般用在<link>、<a>中,其是在建立当前元素与资源之间的联系。浏览器在处理href资源时,会同时继续处理DOM中的其他内容(可视为异步加载)。

src表示的是外部资源的引用,一般用在<img>、<script>和<iframe>中,其是在用引用到的资源替换当前元素。浏览器在处理src资源时,会等待src资源处理完毕后再处理其他DOM内容(可视为同步加载)。

八、如何解决margin重叠问题?

margin重叠指属于同一个BFC容器中的两个父子元素或兄弟元素的垂直方向相邻的margin会发生重叠的现象。

解决方案有:

(1)尽量用padding代替margin

(2)将双方元素的margin值相加后单独加给其中一个元素;

(3)对于父子元素的重叠现象,可以为父元素设置透明border

(4)对于兄弟元素的重叠现象,可以为下面的一个元素设置float

九、通过rgba()设置透明度与opacity设置有何区别?

rgba()只用于设置元素颜色上的透明度,其设置的透明不会被子元素继承。

opacity用于设置元素整体的不透明度,其设置的透明会被子元素继承。

两者在IE8及以下浏览器中均存在兼容问题。

前端面试指南系列传送门:

前端面试指南之JS面试题总结

前端面试指南之Vue面试题总结

前端面试指南之HTML面试题总结