CSS部分的面试题主要考察应试者对CSS基础概念模型的理解例如文档流、盒模型、浮动、定位、选择器权重、样式继承等。很多应试者认为CSS很简单没多少内容,面试就是面試 JavaScript部分的内容这些观点是错误的,面试的第一关往往会考察应试者对CSS的掌握情况因此,CSS也常常是应试者掉入的第一个陷阱
1、CSS有哪些基本选择器?它们的权重是如何表示的
CSS基本选择器有类选择器、属性选择器和ID选择器。
CSS选择器的权重预示着CSS选择器样式渲染的先后顺序元素样式渲染时,权重高的选择器样式会覆盖权重低的选择器样式
通常将权重分为4个等级,可用0.0.0.0来表示这4个等级
!important关键字优先级最高。
注意:!importont井非选择器而是针对选择器内的单一样式设置的。当然不同选择器内应用 !important的权重也是不一样的,例如在id选择器内的!important关键字权重要高于类选择器内的 !important关键字权重,即下面所说的选择器权重组合
内联样式(非元素器)的优先级可看成1.0.0.0。
类属性选择器、属性选择器、伪类的优先级为0.0.1.0
元素选择器、伪元素选择器的优先级为0.0.0.1。
通配符选择器对特殊性没有任何贡献值
当把选择器组合使用嘚时候,相应的层级权重也会递增例如# id .class的权重为0.1.1.0。
2、CSS的引入方式有哪些ink和@ import的区别是什么?
CSS有3种引入方式
通过link标签引入样式与通过@ import方法引入样式有如下区别。
(1)加载资源的限制
link是 XHTML的标签,除了加载CSS文件外还可以加载RSS等其他事务,如加载模板等
如果用link引用CSS,在页面载入时同时加载即哃步加载。
如果用@ import引用CSS则需要等到网页完全载入后,再加载CSS文件即异步加载。
link是 XHTML的标签没有兼容问题。
@ import是在CSS2.1中提出的不支持低版夲的浏览器。
link的标签是DOM元素支持使用 JavaScript控制DOM和修改样式;@ import是种方法,不支持控制DOM和修改样式
3、浮动元素引起的问题和解决方法是什么?
引起的问题有如下几个
(1)css相对于父元素定位的高度无法被撑开,影响与css相对于父元素定位同级的元素
(2)与元素同级的非浮动元素會紧随其后(类似遮盖现象)。
(3)如果一个元素浮动则该元素之前的元素也需要浮动;否则,会影响页面显示的结构(即通常所说的串行现象)
(1)为css相对于父元素定位设置固定高度。
(2)为css相对于父元素定位设置 overflow:hidden即可清除浮动让css相对于父元素定位的高度被撑开。
(3)用 clear:both样式属性清除元素浮动
注意:如果只有左浮动或只有右浮动,可以单独设置 clear:left或 clear:right但是设置clear:both则都可以解决,所以此方法在工作中用嘚更多
(4)外墙法是指在css相对于父元素定位外面,添加“一道墙”设置属性 clear:both
(5)内墙法是指在css相对于父元素定位内部,浮动元素的最後面添加“一道墙”,设置属性 clear:both
注意:这里所说的少创建元素实际上并没有少创建,添加的伪元素也是元素只不过没有写在HTML文档中洏已。
注意:推荐以上这种方式因为 clearfix已经应用在各大CSS框架(如 Bootstrap等)中,并成为行业的默认规范
4、position的值分别是相对于哪个位置定位的?
relative表示相对定位相对于自己本身所在正常文档流中的位置进行定位。absolute表示绝对定位相对于最近一级(从直接父级元素往上数,直到根元素)定位相对于 statIc的css相对于父元素定位进行定位。
fixed用于生成绝对定位相对于浏览器窗口或 frame进行定位。
statIc是默认值没有定位,元素出现在囸常的文档流中
sticky是生成黏性定位的元素,容器的位置根据正常文档流计算得出
注意:CSS3的新增属性有点类似于 relative与 fixed的结合体。如果目标区域在屏幕中可见表现为 relative;如果目标区域在屏幕中不可见,表现为fixed
共同点是对内联元素设置float和 absolute属性,可以让元素脱离文档流并且可以設置其宽高。
不同点是float仍可占据位置不会覆盖在另一个BFC区域上,浮动的框可以向左或向右移动直到它的外边缘碰到包含框或另一个浮動框的边框为止, absolute会覆盖文档流中的其他元素即遮盖现象。
6、CSS选择器(符)有哪些
(4)相邻选择器(h1+p)
(7)通配符选择器(*)
注意:茬CSS3规范中,为了区别伪元素和伪类CSS3建议伪类用单冒号“:",伪元素用双冒号"::"
7、CSS的哪些样式可以继承?哪些不可以继承
注意:为叻方便辨识,与字体相关的样式通常可以继承与尺寸相关的样式通常不能继承。
8、CSS优先级如何排序
(3) JavaScript是网站中实现前后台交互效果、网页动画效果的一种开发语言,比如鼠标单击( click)事件、前后台数据请求(Ajax)等
10、为什么要初始化CSS?
因为浏览器的兼容问题不同浏覽器对有些标签的默认值是不同的,如果没有初始化CSS往往会导致页面在不同浏览器之间出现差异。
当然初始化样式有时会对SEO产生一定嘚影响,但鱼和熊掌不可兼得所以在力求影响最小的情况下初始化CSS。
11、如何居中div如何居中一个浮动元素?
确定容器的宽高例如宽400px、高200px的div.设置层的外边距。
/*注意由于左上外边距优先级高于右下外边距优先级,因此还可以简化设置 margin:-150px-250px;*/ /*为方便看效果,添加一种背景色*/
12、构成CSS的基本语句是什么
构成CSS的基本语句如下。
选择器{属性名称1:属性值1;属性名称2:属性值2;}
13、display有哪些值说明它们的作用。
block是指块類型默认宽度为css相对于父元素定位宽度,可设置宽高换行显示。 none是指元素不会显示已脱离文档流。
inline是指行内元素类型默认宽度为內容宽度,不可设置宽高同行显示。
inline- block是指默认宽度为内容宽度可以设置宽高,同行显示
list-item是指像块类型元素一样显示,并添加样式列表标记
table是指此元素会作为块级表格显示。
14、简要描述块级元素和行内元素的区别
块级元素的前后都会自动换行。默认情况下块级元素会独占一行。例如<p><h1-h6><div>都是块级元素当显示这些元素中间的文本时,都将从新行中开始显示其后的内容也将在新行中显示。
行内元素可鉯和其他行内元素位于同一行在浏览器中显示时不会换行。例如<a><span>等对于行内元素,不能设置其高度和宽度
还有一种元素是行内块级え素,比如<img>< input>元素等这些元素可以和其他行内元素位于同一行,同时可以设置其高度和宽度
15、如何用DIV+CSS实现3栏布局(左右固定200pX,中间自适應)
16、解释浮动及其工作原理。
浮动的元素可以向左或向右移动直到它的外边缘碰到包含元素(css相对于父元素定位)或另一个浮动元素的边框为止。要想使元素浮动必须为元素设置一个宽度( width)。虽然浮动元素已不在文档流中但是它浮动后所处的位置依然在浮动之湔的水平方向上。
因为浮动元素不在文档流中所以文档流中的块元素表现得就像浮动元素不存在一样,下面的元素会填补原来的位置
囿些元素会在浮动元素的下方,但是这些元素的内容并不一定会被浮动的元素遮盖当定位内联元素时,要考虑浮动元素的边界围绕浮動元素放置内联元素。也可以把浮动元素想象成被块元素忽略的元素而内联元素会关注的元素。
17、解释一下 CSS Sprite以及如何在页面或网站中使用它。
注意:在高级浏览器中可以基于图片的bose64编码存储,将图片与其他类型的文件打包
18、在书写高效CSS时有哪些问题需要考虑?
(1)樣式从右向左解析一个选择器
(2)类型选择器的速度,ID选择器最快 Universal(通配符*)最慢。对于常用的4种类型选择器解析速度由快到慢依佽是ID、 class, tag和 universal。
(3)不要用标签限制ID选择器(如:ul#main- navigation{}ID已经是唯一的,不需要Tag来限制这样做会让选择器变慢)。
(4)后代选择器最糟糕(换句話说 html body ul li a{}这个选择器是很低效的)。
(5)想清楚你的需求再去书写选择器。
(6)CSS3选择器(如nth- child)能够漂亮地定位我们想要的元素又能保证CSS整洁易读。然而这些神奇的选择器会浪费很多的浏览器资源。
(7)我们知道ID选择器的速度最快但是如果都用ID选择器,会降低代码的可讀性和可维护性等在大型项目中,相对于使用ID选择器提升速度代码的可读性和可维护性带来的收益更大。
(1)双边距问题是使用fLoat引起的。
(2)3像素问题是使用float引起的。
(3)超链接 hover伪类样式单击后失效。
(5)PNG图片半透明问题
解决方法是使用 JavaScript代码库,或使用IE滤镜
注意:在使用E滤镜解决PNG图片透明度的时候在1E6中,会对事件产生影响
20、页面重构怎样操作?
编写CSS让页面结构更合理化,提升用户体验達到良好的页面效果并提升性能
display:none隐藏对应的元素,在文档流中不再给它分配空间它各边的元素会合拢,即脱离文档流
visibility:hidden隐藏对应的元素,但是在文档流中仍保留原来的空间
22、内联元素可以实现浮动吗?
在CSS中任何元素都可以浮动。不论浮动元素本身是何种元素都会生荿个块级框。因此对于内联元素,如果设置为浮动会产生和块级框相同的效果。
content属性与:before及:after伪元素配合使用用来插入生成的内容,可以在元素之前或之后放置生成的内容可以插入文本、图像、引号,并可以结合计数器为页面元素插入编号。比如查看如下代码。
24、如何定义高度很小的容器
因为有一个默认的行高,所以在IE6下无法定义小高度的容器
25、如何在图片下方设置几像素的空白间隙?
27、洳何让超出宽度的文字显示为省略号
28、如何使英文单词发生词内断行?
31、已知高度的容器如何在页面中水平垂直居中
32、px和em的区别是什麼?
px和em都是长度单位两者的区别是:px的值是固定的,指定为多少就是多少计算比较容易;em的值不是国定的,是相对于容器字体的大小并且em会继承父级元素的字体大小。
与cm对应的另一个长度单位是rem是指相对于根元素(通常是HTML元素)字体的大小。
33、什么叫优雅降级和渐進增强两者有什么区别?
优雅降级 graceful degradation是指一开始就构建完整的功能然后再针对低版本浏览器进行兼容。
渐进增强 progressive enhancement是指针对低版本浏览器構建页面保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进并追加功能以达到更好的用户体验。
(1)优雅降级从复杂嘚现状开始并试图减少用户体验的供给。
(2)渐进增强则从一个非常基础并且能够起作用的版本开始并不断扩充,以适应未来环境的需要
(3)降级(功能衰减)意味着往回看,而渐进增强则意味着朝前看同时保诬其根基处于安全地带。
34、网页制作会用到哪些图片格式
用于网页制作的主流图像格式有JPG、PNG、GIF等。
JPG:压缩率高文件小,最常用
PNG:支持无损压缩,色彩损失小保真度高,文件稍大
GIF:支歭动画显示,但只支持256色显示目前已经被Fash大量取代。
35、CSS的 content属性有什么作用有什么应用?
CSS的 content属性专门应用在 before/after伪元素上用于插入生成的內容最常见的应用是利用伪类清除浮动。
不起作用(需要注意行内元素的替换元素img、 Input它们是行内元素,但是可以设置它们的宽度和高度并且 margin属性也对它们起作用, margin-op和 margin- botton有着类似于 inline- block的行为)
(1)改版的时候更方便只须改动CSS文件。
(2)页面加载速度更快、结构清晰、页面简潔
(3)表现与结构分离。
(4)搜索引擎优化(SEO)更友好排名更靠前。
38、如果设置<p>的font-sze为10rem那么当用户重置或拖曳浏览器窗口时,它的文夲会不会受到影响
39、谈谈你对BFC规范的理解。
BFC( Block Formatting Context)指块级格式化上下文即一个创建了新的BFC的盒子是独立布局的,盒子里面的子元素的样式不会影响到外面的元素在同一个BFC中,两个毗邻的块级盒在垂直方向(和布局方向有关系)的 margin会发生折叠
BFC决定元素如何对其内容进行咘局,也决定与其他元素的关系和相互作用
40、谈谈你对C规范的理解。
IFC( Inline Formatting Context)指内联格式化上下文IFC的线框( line box)高度由其包含行内元素中最高的实际高度计算而来(不受竖直方向的 padding/margin的影响)。IFC中的线框一般左右都贴紧整个IFC但是会被foat元素扰乱。同一个IFC下的多个线框高度不同
IFCΦ是不可能有块级元素的,当插入块级元素时(如在p中插入div)会产生两个匿名块,两者与div分隔开即产生两个IFC,每个IFC对外表现为块级元素与div垂直排列。
41、谈谈你对GFC规范的理解
item)上定义网格行( grid row)和网格列(grid column)来为每一个网格项目定义位置和空间。
42、谈谈你对FFC规范的理解
FFC( Flex Formatting Context)指自适应格式化上下文,即 display值为fex或lne-flex的元素将会生成自适应容器伸缩容器中的每一个子元素都是一个伸缩单元。伸缩单元可以是任意数量的伸缩单元内和伸缩容器外的一切元素都不受影响。简单地说 Flexbox定义了伸缩容器内伸缩单元的布局。
43、访问超链接后 hover样式就不絀现的原因是什么应该如何解决?
44、什么是外边距重叠重叠的结果是什么?
外边距重叠就是 margin- collapse在CSS中相邻的两个盒子(可能是兄弟关系吔可能是祖先关系)的外边距可以结合成一个单独的外边距。这种合并外边距的方式称为折叠因此而结合成的外边距称为折叠外边距。
折叠结果遵循下列计算规则
(1)当两个相邻的外边距都是正数时,折叠的结果是它们两者中较大的值
(2)当两个相邻的外边距都是负数時折叠的结果是两者中绝对值较大的值。
(3)当两个外边距一正一负时折叠的结果是两者相加的和。
rgba()和 opacity都能实现透明效果但它们最夶的不同是 opacity作用于元素,并且可以设置元素内所有内容的透明度;而 rgba()只作用于元素的颜色或其背景色(设置rgba透明的元素的子元素不会继承透明效果)
46、CSS中可以让文字在垂直和水平方向上重叠的两个属性是什么?
可以用于消除 inline- block元素间的换行符空格间隙
48、有什么方式可以对一個DOM设置它的CSS
49、在CSS中可鉯通过哪些属性定义,使得一个DOM元素不显示在浏览器可视范围内
设置宽高为0,透明度为0设置z- index位置为-1000。
50、常用的块属性标签及其特征有哪些
常用块标签有div、hl、h6、ol、ul、li、d、 table、p、br、form。块标签的特征有独占一行换行显示,可以设置宽、高块可以套块和行。
51、常用的行内属性标签及其特征有哪些
52、浏览器标准模式和怪异模式之间的区别是什么?
它们的区别是盒子模型的渲染模式不同
53、如何避免文档流中嘚空白符合并现象?
空白符合并是标准文档流的特征之一可以通过设置 white-spac修改这一特征,属性值如下
pre表示不会合并空白符,渲染换行符不会自动换行,相当于pre元素
pre-wrap表示不会合并空白符,渲染换行符自动换行pre-line表示合并空白符,渲染换行符自动换行。
nowrap表示合并空白符不会渲染换行符,不会自动换行
normal表示默认值,按照文档流特点渲染合并空白符,不会渲染换行符自动换行。
54、常见的兼容性问题囿哪些
PNG24位的图片在IE6浏览器上出现背景,解决方案是改成PNG8也可以引段脚本进行处理浏览器默认的 margin和 padding不同。解决方案是用一个全局的*{ margin:0 padding:0;}来统一它们
IE6双边距Bug是指在块属性标签float后又有横行的 margin时,在IE6中显示的margin比设置的大浮动IE产生的双倍距离(IE6的双边距问题是指在IE6下如果对え素设置了浮动,同时又设置了 margin-left或 margin- right, margin的值会加倍)
这种情况下IE会产生20px的距离解决方案是在float的标签样式控制中加入display:inline,将其转换为行内属性(這个符号只会被IE6识别)
用渐进识别的方式,从总体中逐渐排除局部
首先,巧妙地使用“\9”这一标记将IE浏览器从所有情况中分离出来。然后再次使用“+”将IE8和I7、IE6分离开,这样IE8就能被独立识别
怪异模式问题是指漏写DTD声明, Firefox仍然会按照标准模式来解析网页但在IE中会触發怪异模式。为避免怪异模式给我们带来不必要的麻烦最好养成书写DTD声明的好习惯。现在可以使用[hml5]
解决方法是养成良好的代码编写习惯同时采用 margin-top或者同时采用 margin- bottom。
55、透明度具有继承性如何取消透明度的继承?
使用rgba给元素的背景设置透明度的方式来替代使用opacity设置元素透奣度的方式,解决子元素继承css相对于父元素定位透明度的问题
56、CSS中,自适应的单位都有哪些
自适应的单位有以下几个
57、说说rem和em的区别。
-
rem表示相对于根元素的字体大小
-
em表示相对于css相对于父元素定位的字体大小
IE会首先加载整个HTML文档嘚DOM,然后再导入外部的CSS文件因此,在页面DOM加载完成到CSS导入完成中间有一段时间页面上的内容是没有样式的,这段时间的长短跟网速和電脑速度都有关系
display:none隐藏对应的元素,在文档布局中不再给它分配空间它各边的元素会合拢,就当它从来都不存在
visibility:hidden隐藏对应的元素,泹是在文档布局中仍保留原来的空间