【前端面试】CSS常见面试题汇总



1、谈谈你对CSS布局的理解

常见的布局方式:固定布局、流式布局、弹性布局、浮动布局、定位布局、margin和padding


2、请列举几个清除浮动的方法

(1)使用clear属性

<div style="clear:both"></div>

(2)使用br标签和其自身的HTML属性

<br clear="all" />

(3)通过设置父元素的样式,实现清除浮动,例如:

  • 父元素设置 overflow:hidden
  • 父元素设置 overflow:auto
  • 父元素设置 display:table
  • 父元素也设置浮动样式

(4)使用 :after 伪元素


3、请列举几种隐藏元素的方法

visibility:hidden,这个属性只是简单的隐藏某个元素,但是元素占用的空间任然存在;

opacity:0,是CSS3的属性,设置元素为完全透明,和 visibility 的效果类似,但是该属性修饰的元素可以使用 transition 和 animate 设置动画效果;

display:none,设置元素为不可见,不会占用文档的空间;

hidden属性,该属性是HTML5中新增的属性,效果和 display 相同;


4、如何让一段文本中的所有英文单词的首字母大写

text-transform: none | capitalize(将每个单词的第一个字母转为大写) | uppercase(将每个单词都转为大写)| lowercase(将每个单词都转为小写)


5、请简述CSS样式表的继承

CSS样式表继承指的是,特定的CSS属性向下传递到子孙元素。会被继承下去的属性如下:

文本相关:font-family,font-size, font-style,font-variant,font-weight, font,letter-spacing,line-height,color;

列表相关:list-style-image,list-style-position,list-style-type, list-style;


6、请简述CSS的选择器

元素选择器:* 、E、 E#id、 E.class

关系选择器:E、F、E>F、E+F、E~F

属性选择器:E[att]、E[att="val"]、E[att~="val"]、E[att^="val"]、E[att$="val"]、E[att*="val"]、E[att|="val"]

伪类选择器:E:link、E:visited、E:hover、E:active、E:focus、E:lang(fr)、E:not(s)、E:root、E:first-child、E:last-chil等

伪对象选择器:E:first-letter/E::first-letter、E:first-line/E::first-line、E:before/E::before、E:after/E::after、E::selection


7、CSS伪类与CSS伪对象的区别

CSS引入伪类和伪元素的概念是为了描述一些现有CSS无法描述的东西,根本区别在于:它们是否创造了新的抽象元素;

伪类:描述了所有逻辑上存在但在文档树中无须标识的分类;

伪对象:代表了某个元素的子元素,这个子元素虽然在逻辑上存在,但却并不实际存在于文档树中;


8、请简述CSS的权重规则

行内样式 > ID > 属性选择器/class类/伪类选择器 > 元素名/伪对象选择器;

关系选择器将拆分为两个选择器再计算权重。


9、请写出多种等高布局

  • 假等高布局:使用背景图片,在列的父元素上使用这个背景图进行Y轴的铺放,从而实现一种等高列的假象
  • 给容器div使用单独的背景色(固定布局、流体布局):用元素中的最大高度撑大其他的容器高度
  • 创建带边框的两列等高布局:用border-left来做,只能使用两列
  • 使用正padding和负margin对冲实现多列布局方法:在所有列中使用正的上下padding和负的上下margin,并在所有列外面加上一个容器,设置overflow:hidden把溢出背景切掉
  • 使用边框和定位模拟列等高:但不能使用在多列
  • 模拟表格布局等高效果:兼容性不好,在IE6/7无法正常运行

10、在CSS样式中使用px、em,各有什么优势,在表现上有什么区别?

px是相对长度单位,相对于显示器屏幕分辨率而言的;

em是相对长度单位,相对于当前对象内文本的字体尺寸;

px定义的字体,无法用浏览器字体放大功能;em的值并不是固定,会继承父级元素的字体大小,

1 ÷ 父元素的font-size × 需要转换的像素值 = em值

11、CSS中link和@import 的区别是什么?

  • link属于HTML标签,而 @import 是CSS提供的,只能加载CSS;
  • 页面被加载时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;
  • @import只能在IE5以上才能识别,而link是HTML标签,无兼容问题;
  • link方式的样式权重高于@import的权重;
  • 当使用javascript控制DOM去改变样式的时候,只能使用link方式,因为@import只有CSS才能识别,DOM无法控制;

12、position的absolute与fixed共同点与不同点?

相同:

  • 改变行内元素的呈现方式,display被置为block

  • 让元素脱离普通流,不占据空间

  • 默认会覆盖到非定位元素上

区别

  • absolute的”根元素“是可以设置的,而fixed的”根元素“固定为浏览器窗口。

  • 当你滚动网页,fixed元素与浏览器窗口之间的距离是不变的。


13、position的值,relative 和 absolute 分别是相对于谁进行定位的?

absolute:生成绝对定位的元素,相对于 static 定位以外的第一个祖先元素进行定位

fixed:生成绝对定位的元素,相对于浏览器窗口进行定位。 (IE6不支持)

relative:生成相对定位的元素,相对于其在普通流中的位置进行定位

static:默认值。没有定位,元素出现在正常的流中


14、CSS3有哪些新特性?

新增特性有:圆角(border-radius)、阴影(box-shadow)、对文字加特效(text-shadow)、线性渐变(gradient)、变形(transform);

增加了更多的CSS选择器,媒体查询,多栏布局,多背景rgba,引入伪元素::selection。


15、为什么要初始化CSS样式

因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没有初始化CSS,往往会出现浏览器之间的页面显示差异;

CSS样式初始化之后会对SEO有一定的影响。


16、解释下 CSS sprites 原理,及优缺点?

CSS sprites 其实就是把网页中的一些背景图片整合到一张图片文件中,在利用CSS的 background-image,background-repeat,background-position的组合进行背景定位,background-position可以用数字精确的定位出背景图片的位置。

优点:

  • 减少网页的http请求
  • 减少图片的字节
  • 解决网页设计师在图片命名上的困扰,只需要对一张集合的图片上命名就可以了,不需要对每一个小元素进行命名
  • 更换风格方便,只需要在一张或少张图片上修改图片的颜色或样式,整个网页的风格就可以改变了

缺点:

  • 在宽屏,高分辨率的屏幕下的自适应页面,如果背景图不够宽,很容易出现背景断裂
  • CSS sprites 在开发的时候,需要通过Photoshop或其他工具测量计算每一个背景单元的精确位置
  • 在维护的时候比较麻烦,如果页面背景有少许改动,一般就要修改这张合并的图片

17、解释一下浮动及其工作原理?

浮动元素脱离文档流,不占据空间(引起“高度塌陷”现象);

浮动元素碰到包含它的边框或者浮动元素的边框停留。


18、浮动元素引起的问题

  • 父元素的高度无法被撑开,影响与父元素同级的元素

  • 与浮动元素同级的非浮动元素会跟随其后

  • 若非第一个元素浮动,则该元素之前的元素也需要浮动,否则会影响页面显示的结构


19、什么是FOUC(无样式内容闪烁)?你如何来避免FOUC?

如果使用@import方式对CSS进行导入,会导致某些页面在windows下的IE出现一些奇怪的现象:
以无样式显示页面内容的瞬间闪烁,这种现象被称为文档样式短暂失效,简称FOUC

原理:当样式表晚于结构性html加载,当加载到此样式表时,页面将停止之前的渲染。此样式表被下载和解析后,将重新渲染页面,也就出现了短暂的花屏现象。

解决方法:使用LINK标签将样式表放在文档HEAD中。


20、line-height 三种赋值方式有何区别?(带单位、纯数字、百分比)

带单位:px不用计算,em则会使元素以其父元素font-size值为参考来计算自己的行高;

纯数字:把比例传递给后代,例如父级行高为1.5,子元素字体为18px,则子元素行高为1.5*18=27px;

百分比:将计算后的值传递给后代;


21、:link、:visited、:hover、:active 的执行顺序是怎么样的?

:link > :visited > :hover > :active

22、经常遇到的浏览器兼容性有哪些?如何解决?

  • 浏览器默认的 margin 和 padding 不同
  • IE6双边距bug
  • 在IE6、IE7中元素高度超出自己设置高度,原因是IE8以前的浏览器中会给元素设置默认的行高的高度导致的
  • min-height 在IE6下不起作用
  • 透明性IE用filter.Alpha(opcity=60),而其他主浏览器用opacity:0.6
  • input边框问题,去掉input边框一般用 border:none 就可以了,由于IE6在解析input样式时的bug(优先级问题),在IE6下无效

23、有哪些方式可以对一个DOM设置它的CSS样式?

  • 外部样式表,使用 <link>标签引入一个外部CSS样式
  • 内部样式表,将CSS代码放在 <style> 标签内部
  • 内联样式,将CSS样式直接定义在HTML元素内部

24、什么是外边距重叠?重叠的结果是什么?

外边距重叠就是margin-collapse;

在CSS当中,相邻的两个盒子(可能是兄弟关系也可能是祖先关系)的外边距可以结合成一个单独的外边距。这种合并外边距的方式称为折叠,并且因而所结合成的外边距称为折叠外边距;

折叠结果计算规则:

  • 两个相邻的外边距都是正数时,折叠结果是他们两者之间较大的值;
  • 两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值;
  • 两个外边距一正一负时,折叠结果是两者的相加的和

25、rgba() 和 opacity 的透明效果有什么不同?

  • opacity 作用于元素,以及元素内的所有内容的透明度,rgba()只作用于元素的颜色或其背景色
  • 设置rgba透明的元素的子元素不会继承透明效果

26、CSS属性content有什么作用?有什么应用?

css的content属性专门应用在 after/before 伪元素上,用于插入生成内容,可以配合自定义字体显示特殊符号。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM