前端面试题整理——CSS篇

来源:互联网 发布:淘宝客户管理系统 编辑:程序博客网 时间:2024/06/08 05:00

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 相对「暴力」,不管你有没有用,统统重置成一样的效果,且影响的范围很大,讲求跨浏览器的一致性。【摘自知乎】
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.你会如何解决特定浏览器的样式问题?

这个问题有点不太明白想要问什么,就当时问跨浏览器的兼容性问题好了。CSS hack方法
1.IE条件注释
2.符号前缀发
3.!important方法

11.如何为有功能限制的浏览器提供网页?你会使用哪些技术和处理方法?

渐进增强 progressive enhancement:针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。
优雅降级 graceful degradation:一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。

12.有哪些的隐藏内容的方法 (如果同时还要保证屏幕阅读器可用呢)?

方法一:display:none;搜索引擎可能认为被隐藏的文字属于垃圾信息而被忽略,屏幕阅读器(是为视觉上有障碍的人设计的读取屏幕内容的程序)会忽略被隐藏的文字。所以这个方法并不适用。
方法二:visibility: hidden ;这个大家应该比较熟悉就是隐藏的内容会占据他所应该占据物理空间。即内容虽然被隐藏,但是它所在的文档流的位置变成空白,会占据页面上的空间。
方法三:overflow:hidden;可以达到隐藏内容的目的且同时可以被屏幕阅读器可用。
方法四:利用定位将内容移出屏幕。
方法五:内容透明度设置为0.

13.你用过栅格系统 (grid system) 吗?如果使用过,你最喜欢哪种?

 

14.你用过媒体查询,或针对移动端的布局/CSS 吗?

media query(媒体查询)是对media type的一种增强,是CSS 3的重要内容之一。
media type(媒体类型)是css 2中的一个非常有用的属性,通过media type我们可以对不同的设备指定特定的样式.
我们通常会用到的media type会是all 和screen,然后是print.
media type的几种使用方法:
方法一:



方法二:
@import url("style.css") screen;
方法三:

方法四:
@media screen{
selector{rules}
}

最常用的是第一种和第四种方法。
media query 媒体查询,media query是CSS 3对media type的增强,事实上我们可以将media query看成是media type+css属性判断。
例如:
 http://www.jb51.net/css/27232.html
18.使用 CSS 预处理器的优缺点有哪些?请描述你曾经使用过的 CSS 预处理器的优缺点。

 

普遍的三款 CSS 预处理器框架,分别是 Sass、Less CSS、Stylus。
CSS 预处理器是一种语言用来为 CSS 增加一些编程的的特性,无需考虑浏览器的兼容性问题,例如你可以在 CSS 中使用变量、简单的程序逻辑、函数等等在编程语言中的一些基本技巧,可以让你的 CSS 更见简洁,适应性更强,代码更直观等诸多好处。
总结来讲就是用编程的方法来写CSS样式,而不是手工一行行码,相当于从手工业时代进化到工业时代。

19.如果设计中使用了非标准的字体,你该如何去实现?

1、用图片代替。
2、使用在线字库。



css selector{
Font-family: “font name”, serif;}