前端面试题整理——CSS篇

1.CSS 中类 (classes) 和 ID 的区别。
1.书写上的差别:class名用“.”号开头来定义,id名用“#”号开头来定义; 2.调用上的区别:在同一个html网页页面中class是可以被多次调用的(在不同的地方)。而id名作为标签的身份则是唯一的,id在页面中只能出现一次。在js脚本中经常会用到id来修改一个标签的属性 3.id作为元素的标签,用于区分不同结构和内容,而class作为一个样式,它可以应用到任何结构和内容上。 4.在布局思路上,一般坚持这样的原则:id是先确定页面的结构和内容,然后再为它定义样式:而class相反,它先定义好一类样式,然后再页面中根据需要把类样式应用到不同的元素和内容上面。 5.在实际应用时,class更多的被应用到文字版块以及页面修饰等方面,而id更多地被用来实现宏伟布局和设计包含块,或包含框的样式。

2.请问 “resetting” 和 “normalizing” CSS 之间的区别?你会如何选择,为什么?
Normalize 相对「平和」,注重通用的方案,重置掉该重置的样式,保留有用的 user agent 样式,同时进行一些 bug 的修复,这点是 reset 所缺乏的。 Reset 相对「暴力」,不管你有没有用,统统重置成一样的效果,且影响的范围很大,讲求跨浏览器的一致性。【摘自知乎】 http://jerryzou.com/posts/aboutNormalizeCss/ Normalize.css是一种CSS reset的替代方案。它们的区别有: 1. Normalize.css 保护了有价值的默认值,Reset通过为几乎所有的元素施加默认样式,强行使得元素有相同的视觉效果。相比之下,Normalize.css保持了许多默认的浏览器样式。这就意味着你不用再为所有公共的排版元素重新设置样式。当一个元素在不同的浏览器中有不同的默认值时,Normalize.css会力求让这些样式保持一致并尽可能与现代标准相符合。 2. Normalize.css 修复了浏览器的bug,它修复了常见的桌面端和移动端浏览器的bug。这往往超出了Reset所能做到的范畴。关于这一点,Normalize.css修复的问题包含了HTML5元素的显示设置、预格式化文字的font-size问题、在IE9中SVG的溢出、许多出现在各浏览器和操作系统中的与表单相关的bug。 3.Normalize.css 不会让你的调试工具变的杂乱 4. Normalize.css 是模块化的 5. Normalize.css 拥有详细的文档 选择Normalize.css ,主要是reset.css为几乎所有的元素施加默认样式,所以需要对所有公共的排版元素重新设置样式,这是一件很麻烦的工作。

3.请解释浮动 (Floats) 及其工作原理。
答:float属性定义了元素是否浮动及在哪个方向浮动,在CSS中任何元素都可以浮动,且浮动元素会生成一个块级框,而不论它本身是何种元素。并且盒子的宽度不在伸展,而是根据盒子里面的内容的宽度来确定。浮动属性会使得浮动的元素脱离文档流,所以文档的普通流中的块框会表现的像浮动框不存在一样。

4.描述z-index和叠加上下文是如何形成的。
首先来看在CSS中叠加上下文形成的原因: 1.负边距 margin为负值时元素会依参考线向外偏移。margin-left/margin-top的参考线为左边的元素/上面的元素(如无兄弟元素则为父元素的左内侧/上内侧),margin-right和margin-bottom的参考线为元素本身的border右侧/border下侧。一般可以利用负边距来就行布局,但没有计算好的话就可能造成元素重叠。堆叠顺序由元素在文档中的先后位置决定,后出现的会在上面。 2.position的relative/absolute/fixed定位 当为元素设置position值为relative/absolute/fixed后,元素发生的偏移可能产生重叠,且z-index属性被激活。z-index值可以控制定位元素在垂直于显示屏方向(Z 轴)上的堆叠顺序(stack order),值大的元素发生重叠时会在值小的元素上面。 z-index属性 z-index只能在position属性值为relative或absolute或fixed的元素上有效。 基本原理:z-index值可以控制定位元素在垂直于显示屏方向(Z 轴)上的堆叠顺序(stack order),值大的元素发生重叠时会在值小的元素上面。 使用相对性:z-index值只决定同一父元素中的同级子元素的堆叠顺序。父元素的z-index值(如果有)为子元素定义了堆叠顺序(css版堆叠“拼爹”)。向上追溯找不到含有z-index值的父元素的情况下,则可以视为自由的z-index元素,它可以与父元素的同级兄弟定位元素或其他自由的定位元素来比较z-index的值,决定其堆叠顺序。同级元素的z-index值如果相同,则堆叠顺序由元素在文档中的先后位置决定,后出现的会在上面。所以如果当你发现一个z-index值较大的元素被值较小的元素遮挡了,请先检查它们之间的dom结点关系,多半是因为其父结点含有激活并设置了z-index值的position定位元素。

5.请描述 BFC(Block Formatting Context) 及其如何工作。
BFC(Block Formatting Context)直译为“块级格式化范围”。

6.block,inline和inline-block的概念以及区别
首先这是display中的三个属性值,不是元素指类型,元素类型在HTML5之前分为两种分别是块级元素( block-level elements)和内连元素( inline elements)。但是当display的属性值被设置为block时,元素会以块级元素( block-level elements)显示,而设置为inline时会以内连元素( inline elements)显示。 display:block block元素会独占一行,多个block元素会各自新起一行。默认情况下,block元素宽度自动填满其父元素宽度。 block元素可以设置width,height属性。块级元素即使设置了宽度,仍然是独占一行。 block元素可以设置margin和padding属性。 display:inline inline元素不会独占一行,多个相邻的行内元素会排列在同一行里,直到一行排列不下,才会新换一行,其宽度随元素的内容而变化。 inline元素设置width,height属性无效。 inline元素的margin和padding属性,水平方向的padding-left, padding-right, margin-left, margin-right都产生边距效果;但竖直方向的padding-top, padding-bottom, margin-top, margin-bottom不会产生边距效果。 display:inline-block 简单来说就是将对象呈现为inline对象,但是对象的内容作为block对象呈现。之后的内联对象会被排列在同一行内。比如我们可以给一个link(a元素)inline-block属性值,使其既具有block的宽度高度特性又具有inline的同行特性。即对inline-block元素可以设置宽度和高度,同时inline-block元素又可以在同行进行排列。 备注:属性为inline-block元素之间的空格或者换行在浏览器上会是一个空白的间隙。且IE6和7是不支持这个属性的,需要通过display:inline;zoom:1做hack处理。

7.列举不同的清除浮动的技巧,并指出它们各自适用的使用场景。
首先来说明为什么要清除浮动? 当一个容器中的元素全部浮动之后,由于浮动会让元素脱离普通文档流,所以对于外面的这个容器来讲它就没有内容将它撑开,背景设置无法显示,margin设置无法显示。 清除浮动的方法: 一、添加新的元素 、应用 clear:both; 例如:

1
2
3

.clear{clear:both; height: 0; line-height: 0; font-size: 0} 优点:简单,代码少,浏览器支持好,不容易出现怪问题 缺点是要增加很多无效布局,但这是清除浮动用的比较多的一种方法。
二、父级div定义overflow:auto或者hidden
//这里添加了一个class
1
2
3

.over-flow{ overflow: auto; zoom: 1; //zoom: 1; 是在处理兼容性问题 } 原理:必须定义width或zoom:1,同时不能定义height,使用overflow属性来清除浮动有一点需要注意,overflow属性共有三个属性值:hidden,auto,visible。我们可以使用hiddent和auto值来清除浮动,但切记不能使用visible值,如果使用这个值将无法达到清除浮动效果。 优点:简单,代码少,浏览器支持好 缺点:使用auto时内部宽高超过父级div时,会出现滚动条,使用hidden时会被隐藏
三、after 方法 原理:利用:after和:before来在元素内部插入两个元素块,从面达到清除浮动的效果。其实现原理类似于clear:both方法,只是区别在于:clear在html插入一个div.clear标签,而这种方法则是利用其伪类clear:after在元素内部增加一个类似于div.clear的效果。下面来看看其具体的使用方法:

1

2
3


.outer {zoom:1;} /==for IE6/7 Maxthon2==/ .outer :after {clear:both;content:’.’;display:block;width: 0;height: 0;visibility:hidden;} 其中clear:both;指清除所有浮动;content: ‘.’; display:block;对于FF/chrome/opera/IE8不能缺少,其中content()可以取值也可以为空。visibility:hidden;的作用是允许浏览器渲染它,但是不显示出来,这样才能实现清除浮动。 所以总的来说,推荐使用伪类的办法。

8.请解释 CSS sprites,以及你要如何在页面或网站中实现它。
通常被意译为“CSS图像拼合”或“CSS贴图定位”。 CSS Sprites就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的“background-image”,“background- repeat”,“background-position”的组合进行背景定位,background-position可以用数字能精确的定位出背景图片的位置。 优点:当页面加载时,不是加载每个单独图片,而是一次加载整个组合图片。这是一个了不起的改进,它大大减少了HTTP请求的次数,减轻服务器压力,同时缩短了悬停加载图片所需要的时间延迟,使效果更流畅,不会停顿。 缺点:做图像拼合的时候很麻烦。

9.你最喜欢的图片替换方法是什么,你如何选择使用。
设计师能够用一张背景图像替代某元素中的原始文字,以期显示出更美观的字体。 实现方法 一:添加span标签 该技巧的实现非常简单:用span将元素中的文本包围起来,然后通过应用CSS样式隐藏这个span中的文本,最后将背景图像应用到该元素之上即可。例如,对于下面的这一段HTMl标记。 二、负text-indent属性值 设计师Mike Rundle提出了一种使用负text-indent属性值的方法,将文本推到屏幕的左边缘之外。虽然该方案的适用性并不广泛——IE 5.0会将背景图片随文本一起推出浏览者的视线范围——但却相当简洁优雅。 缺点:并没有解决浏览器禁用图像后空白页面的可访问性问题;有时在IE 5.0中无法使用。
意义:而图像替换技术则保留了被替换元素中的原有文本,因此无论对何种客户而言,理解页面内容都不成问题。主要是考虑SEO,而非视觉上的效果。

10.你会如何解决特定浏览器的样式问题? 11.如何为有功能限制的浏览器提供网页?你会使用哪些技术和处理方法? 12.有哪些的隐藏内容的方法 (如果同时还要保证屏幕阅读器可用呢)? 13.你用过栅格系统 (grid system) 吗?如果使用过,你最喜欢哪种? 14.你用过媒体查询,或针对移动端的布局/CSS 吗? 15.你熟悉 SVG 样式的书写吗? 16.如何优化网页的打印样式? 17.在书写高效 CSS 时会有哪些问题需要考虑? 18.使用 CSS 预处理器的优缺点有哪些?请描述你曾经使用过的 CSS 预处理器的优缺点。 19.如果设计中使用了非标准的字体,你该如何去实现? 20.请解释浏览器是如何判断元素是否匹配某个 CSS 选择器?

你可能感兴趣的:(前端面试题整理——CSS篇)