Web前端面试题及答案——HTML&CSS、JS、DOM

虽然个人认为有些知识不是必须记忆的,需要的时候可以查阅笔记,但是对于得到面试的机会还是很重要的。 

HTML&CSS

1、清除浮动的几种方式,各自的优缺点

清除浮动:使父元素围住浮动的子元素,避免对后续元素造成影响。

(1)给父元素设置overflow:hidden;或float:left;或position:absolute;或position:relative;。触发块级格式化上下文(BFC),从正常文档流脱离,父元素本身实现独立布局,围住其中的浮动元素。但专门这样设置,可能会改变布局,对于后三者,使block变为inline-block,父元素宽度变化。

适用于父元素也需要浮动。

(2)在子元素后面添加空的block元素,并设置其样式为clear:both。添加了额外的元素,且block元素带有margin等。

(3)在父元素上加clearfix类名,在父元素的最后加块级元素.(伪元素选择器),通过clear:both使父元素括住浮动的元素来清除float的影响,使.不可见。常用这种方式,Bootstrap支持clearfix类名。

通常推荐这种方式。



p1

p2

2、块级元素水平垂直居中的方法


DEMO

父元素和子元素的大小不确定。

(1)table-cell+inline-block

兼容IE6,7需要把结构换为

,通过display:inline; zoom:1;模拟inline-block。

.parent{display:table-cell; text-align:center; vertical-align:middle;}
.child{display:inline-block;}

(2) relative+absolute+transform

绝对定位脱离文档流,不会对其它元素产生影响。transform是CSS3新增内容,对IE6,7,8可能没法兼容,在高版本浏览器需要加前缀。

.parent{position:relative;}
.child{position:absolute; left:50%; top:50%; transform:translate(-50%,-50%);}

(3)flex

IE6,7,8可能没法兼容flex。

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

如果子元素大小确定。

.parent{position:relative;}
.child{
  width:100px; height:100px;
  position:absolute; top:0; right:0; bottom:0; left:0; margin:auto;
}

3、CSS选择器有哪些?优先级如何计算

(1)普通选择器:通配符选择器*、标签选择器、id选择器#、类选择器.、属性选择器[]、伪类选择器:

(2)伪元素选择器::

(3)组合选择器:后代选择器 、子选择器、兄弟选择器+、只要前面有某种元素~

优先级:将权重相加。a=行内样式style,1000;b=id选择器,100;c=类、伪类和属性选择器,10;d=标签选择器和伪元素选择器,1。相同属性优先级高覆盖低、后面覆盖前面,不同属性合并。

超链元素伪类的设置顺序:link :visited :hover :active

4、px、em和rem的区别

px,像素,相对于显示器屏幕分辨率而言;

em,相对长度单位,相对于当前对象内文本的字体大小,若字体大小未显式设置,则相对于浏览器默认的字体大小;

rem,相对长度单位,相对于html根元素的字体大小。

5、display:none和visibility:hidden的区别

display:none设置元素不显示,是彻底消失,不在文档流中占位,浏览器也不会解析该元素。visibility:hidden是视觉上消失,可理解为透明度为0的效果,在文档流中占位,浏览器会解析该元素。

使用visibility:hidden比display:none性能上要好。display:none切换显示时,页面产生回流reflow(页面中的部分元素需要改变规模尺寸、布局、显示隐藏等,页面重新构建)。而visibility:hidden切换是否显示时则不会引起回流,只是元素的外观被改变,且在没有改变布局的情况下发生。

6、用一个div写出三条横线的小图标

div{
  height:5px;
  width:30px;
  background-color:#DD575C;
  background-clip:content-box;
  padding-top:5px;
  padding-bottom:5px;
  border-top:#DD575C solid 5px;
  border-bottom:#DD575C solid 5px;
}

7、用一个div实现倒三角

div{
  width:0;
  border-top:10px solid #DD575C;
  border-left:5.77px solid transparent;
  border-right:5.77px solid transparent;
}

其它方法仅供参考。ASCII码31是倒三角。 

/* 正方形旋转加截取 */
.parentDiv {
  height:50px;
  overflow:hidden;
}
.triangleDiv {
  position: relative;
  height:70.7px;
  width:70.7px;
  top:-35.4px;
  left:19.6px;
  background-color:#DD575C;
  transform:rotate(45deg);
}

8、盒模型

在网页中,一个元素占有空间的大小由几个部分构成,其中包括元素的内容(content)、内边距(padding)、边框(border),外边距(margin)四个部分。

标准盒子模型 = margin + border + padding + content (content =  width | height)

IE盒子模型 = margin + content (content = border + padding + width | height)

box-sizing:content-box|border-box  切换标准模型和IE模型

9、position的absolute和fixed的共同点与不同点

共同点:脱离文档流,文档流中没有它的空间,未设置偏移时在原位置。默认宽度为内容宽度。

absolute:绝对定位。参照物为第一个定位元素(非static)/根元素html(与浏览器窗口同等大小的首屏区域)。元素随页面的滚动而滚动。

fixed:固定定位。参照物是视窗。不随页面的滚动而滚动。

10、sprite精灵图

把设计稿上的小图标拼合到同一张图片中,减少网络请求,提升网页加载速度。

①排列常用横向排列和纵向排列。 ②图片之间必须保留孔隙,小图标20像素。如果更改按钮大小,CSS里背景图位置属性不须改变;容错,如果CSS设置错误,不会导致下面图片露出来。③合并原则:同属于一个模块、大小相近、色彩相近。只本页用到的图片合并、集中使用,有状态的图标合并。④IE6不支持PNG24半透明,存两份:高级浏览器PNG24 sprite.png、IE6 PNG-8 sprite_ie.png。

background-image:url("/images/x.png");
background-repeat:no-repeat;
background-position:20px 60px;
background-size:10px 10px;

11、HTML5

表现页面中的章节结构: