前端面试题整理(css)

1、介绍所知道的CSS hack技巧(如:_, *, +, \9, !important 之类)。

CSS hack的原理:

由于不同的浏览器和浏览器各版本对CSS的支持及解析结果不一样,以及CSS优先级对浏览器展现效果的影响,我们可以据此针对不同的浏览器情景来应用不同的CSS。

条件注释法:

只在IE下生效:
<!--[if IE]>
这段文字只在IE浏览器显示
<![endif]-->

只在IE6下生效:
<!--[if IE 6]>
这段文字只在IE6浏览器显示
<![endif]-->

只在IE6以上版本生效:
<!--[if gte IE 6]>
这段文字只在IE6以上(包括)版本IE浏览器显示
<![endif]-->

只在IE8上不生效:
<!--[if ! IE 8]>
这段文字在非IE8浏览器显示
<![endif]-->

非IE浏览器生效:
<!--[if !IE]>
这段文字只在非IE浏览器显示
<![endif]-->

类内属性前缀法:

hack 写法 实例 IE6(S) IE6(Q) IE7(S) IE7(Q) IE8(S) IE8(Q) IE9(S) IE9(Q) IE10(S) IE10(Q)
* *color 青色 Y Y Y Y N Y N Y N Y
+ +color 绿色 Y Y Y Y N Y N Y N Y
- -color 黄色 Y Y N N N N N N N N
_
_color

蓝色 Y Y N Y N Y N Y N N
# #color 紫色 Y Y Y Y N Y N Y N Y
\0 color:red\0 红色 N N N N Y N Y N Y N
\9\0 color:red\9\0 粉色 N N N N N N Y N Y N
!important color:blue !important;color:green; 棕色 N N Y N Y N Y N Y Y

说明:在标准模式中

  • “-″减号是IE6专有的hack
  • “\9″ IE6/IE7/IE8/IE9/IE10都生效
  • “\0″ IE8/IE9/IE10都生效,是IE8/9/10的hack
  • “\9\0″ 只对IE9/IE10生效,是IE9/10的hack

选择器前缀法:

选择器前缀法是针对一些页面表现不一致或者需要特殊对待的浏览器,在CSS选择器前加上一些只有某些特定浏览器才能识别的前缀进行hack。

目前最常见的是

*html *前缀只对IE6生效
*+html *+前缀只对IE7生效
@media screen\9{...}只对IE6/7生效
@media \0screen {body { background: red; }}只对IE8有效
@media \0screen\,screen\9{body { background: blue; }}只对IE6/7/8有效
@media screen\0 {body { background: green; }} 只对IE8/9/10有效
@media screen and (min-width:0\0) {body { background: gray; }} 只对IE9/10有效
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {body { background: orange; }} 只对IE10有效

CSS hack利弊

一般情况下,我们尽量避免使用CSS hack,但是有些情况为了顾及用户体验实现向下兼容,不得已才使用hack。比如由于IE8及以下版本不支持CSS3,而我们的项目页面使用了大量 CSS3新属性在IE9/Firefox/Chrome下正常渲染,这种情况下如果不使用css3pie或htc或条件注释等方法时,可能就得让IE8- 的专属hack出马了。使用hack虽然对页面表现的一致性有好处,但过多的滥用会造成html文档混乱不堪,增加管理和维护的负担。相信只要大家一起努 力,少用、慎用hack,未来一定会促使浏览器厂商的标准越来越趋于统一,顺利过渡到标准浏览器的主流时代。抛弃那些陈旧的IE hack,必将减轻我们编码的复杂度,少做无用功。

2、介绍CSS盒模型。

盒状模型是CSS中重要的概念。盒状模型中最重要的是内容,它是必备的,其他的几项都是可选的。 如上图,盒状模型有内至外的顺序是:
  • content(内容,它可以是文字、图片等。)
  • padding(内边距,也有人称之为空白、内补丁等。)
  • border(边框。)
  • margin(外边距,也可称为边界。)
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>css盒子模型</title>
    <style>
        *{margin: 0;padding: 0;} /*清除浏览器默认的边距*/
        .block{width:300px;height:200px;padding:10px;border:10px solid red;background: #000;margin:20px 0 0 20px;}
        .box{height:100px;width: 200px;background: yellow;color: #ff4a00;border:5px solid green;}
    </style>
</head>
<body>
    <div class="block">
        <div class="box">内容</div>
    </div>
</body>
</html>

3、CSS层叠是什么?介绍一下。

我认可的理解:层叠指的是上级标签的样式会自动继承到其所有下级标签,如针对<body>设置的标签选择器所设的字体样式会自动应用到<body>下的<p>中,除非<p>重写了相关样式将其覆盖。
CSS语义化的命名是指用易于理解的名称对html标签附加的class或id命名,如对于页面上方的<div>,可将其id设为header;页面下方的<div>设为footer,可以增强CSS的可维护性。

基本上层叠的意思就是“继承”、“权重”、“覆盖”,通过良好的层级命名更好的实现效果,更少的代码,更多的功能。

4、都知道哪些CSS浏览器兼容性问题。

问题1:不同浏览器的标签默认的外边距(margin)和内边距(padding)不同

解决方案:*{margin:0;padding:0;}

备注:不建议通配符*,css遍历也是有代价的(虽说现代浏览器可以忽略)。可以写全body,p,html,h1,h2,h3...{margin:0;padding:0;}

问题2:块属性标签float后,又有横行的margin情况下,在IE6显示margin比设置的大

解决方案:在float的标签样式控制中加入 display:inline;将其转化为行内属性

备注:我们最常用的就是div+CSS布局了,而div就是一个典型的块属性标签,横向布局的时候我们通常都是用div+float实现的,横向的间距设置如果用margin实现,这就是一个必然会碰到的兼容性问题。

问题3:图片默认有间距

解决方案:使用float属性为img布局,上下间距可以设置vertical-align: middle;或者设置成display:block。

备注:因为img标签是行内属性标签,所以只要不超出容器宽度,img标签都会排在一行里,但是部分浏览器的img标签之间会有个间距。去掉这个间距使用float是正道。

问题4:CSS透明问题

解决方案:

IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)。
FF:opacity:0.6。

备注:最好两个都写,并将opacity属性放在下面。

问题5:CSS圆角问题

解决方案:ie7以下版本不支持圆角,其他浏览器都是加前缀例:FF(-moz-)

备注:随着浏览器更新换代,圆角属性都会被支持的;ie6-7,可以用三角形实现(有兴趣的可以研究研究)

5、CSS3都有哪些新内容。

css3边框:

  • border-radius:圆角边框
  • box-shadow:边框阴影
  • border-image:边框图片

css3背景:

  • background-size:图片大小
  • background-origin:图片定位区域

css3文本效果:

  • text-shadow:文本阴影
  • word-wrap:自动换行

css3字体:

  • @font-face:定义字体

css32D转换:

  • translate():当前位置移动
  • rotate():顺时针旋转角度
  • scale():元素尺寸放大缩小
  • skew():元素翻转
  • matrix():2D转换的组合

css33D转换:

  • rotateX():围绕其 X 轴旋转
  • rotateY():围绕其 Y 轴旋转

css3过渡:

  • transition:hover过渡

css3动画:

animation:动画设置
@keyframes:创建动画规则

css3多列:

  • column-count:分隔的列数
  • column-gap:列之间的间隔
  • column-rule:列之间的宽度、样式和颜色

css3用户界面:

  • resize:是否可由用户调整元素尺寸
  • box-sizing:可以改变盒子模型
  • outline-offset:超出边框边缘的位置绘制轮廓
时间: 2024-11-14 16:45:22

前端面试题整理(css)的相关文章

web前端面试题整理(HTML篇)

web前端面试题整理(HTML篇)需要web前端课程工具和电子书,可以加: 33群105601600;  22群1203428331. h5的改进:新元素画布canvas: HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成音频audio视频video语义性: article,  nav ,  footer, section, aside, hgroup等.时间time 新属性拖放: draggable   <img draggable=&q

最近面试前端面试题整理(css部分)

对最近面试的面试题坐下总结: 一,css部分 1,html元素的垂直居中 答案: <div id="box"> <div> 测试 </div> </div> #box{ width: 200px; height: 200px; text-align:center; vertical-align: middle; display: table-cell; } 2,css考的最多是flex: <!DOCTYPE html> <

【web前端面试题整理08】说说最近几次面试(水)

为什么换工作 换工作简单来讲一般会归纳为钱不够或者人不对,我们团队氛围很不错,所以基本就定位到钱不够了,而我更多是考虑到以后的职业发展,简单说来就是对以后几年的工作有想法,而这种想法实现不一定能在现在的团队获得,在短期内也看不到希望,加之公司职级晋升不合理等考虑,也就自然而然想到了离职. 其实在鞋厂这两年,真的收获了很多东西,也负责了很重要的业务,这些财富可能是其它大公司不一定能给予的,虽然一直级别低点也就没太多在意,直到最近职级福利缩水...... 最初我面试的职级为X,HR给了一套智力题做,

【web前端面试题整理02】前端面试题第二弹袭来,接招!(转)

前言 今天本来准备先了解下node.js的,但是, 看看我们一个小时前与一个小时后的差距: 既然如此,我们继续来搜集我们的前端 面试题大业吧!!! 特别感谢玉面小肥鱼提供哟,@玉面小飞鱼 题目一览 JavaScript编程题1.实现输出document对象中所有成员的名称和类型:2.如何获得一个DOM元素的绝对位置?(获得元素位置,不依赖框架)3.如何利用JS生成一个table?4.实现预加载一张图片,加载完成后显示在网页中并设定其高度为50px,宽度为50px:5.假设有一个4行td的tabl

2016年BAT公司常见的Web前端面试题整理

1.JavaScript是一门什么样的语言,它有哪些特点? 没有标准答案. 2.JavaScript的数据类型都有什么? 基本数据类型:String,boolean,Number,Undefined 引用数据类型:Object(Array,Date,RegExp,Function,Null) 那么问题来了,如何判断某变量是否为数组数据类型? 方法一.判断其是否具有“数组性质”,如slice()方法.可自己给该变量定义slice方法,故有时会失效 方法二.obj instanceof Array

前端面试题整理---JS基础

为了督促自己学习,整理了一下前端的面试题 JavaScript: JavaScript 中如何监测一个变量是String类型? typeof(obj)==="string"; typeof obj ==="string"; obj.constructor ===string JS中清除字符串空格的方法        方法一:使用正则匹配 // 去除所有的空格 var str1 = strings.replace(/\s*/g,""); // 去掉

前端面试题整理—性能优化及安全篇

1.什么是web语义化,以及他的优势 web语义化是指通过HTML标记表示页面包含的信息,包含了HTML标签的语义化和css命名的语义化 HTML标签的语义化是指:通过使用包含语义的标签(如h1-h6)恰当地表示文档结构 css命名的语义化是指:为html标签添加有意义的class,id补充未表达的语义,如Microformat通过添加符合规则的class描述信息 优势: 1)去掉样式后页面呈现清晰的结构 2)盲人使用读屏器更好地阅读 3)搜索引擎更好地理解页面,有利于收录 4)便于团队项目的可

前端面试题-HTML+CSS

引用GitHub 上 ltadpoles的前端面试 https://github.com/ltadpoles HTML部分 1. Doctype作用,HTML5 为什么只需要写<!DOCTYPE HTML> doctype是一种标准通用标记语言的文档类型声明,目的是告诉标准通用标记语言解析器要使用什么样的文档类型定义(DTD)来解析文档. <!DOCTYPE>声明必须是HTML文档的第一行,位于html标签之前. HTML5不基于SGML,所以不需要引用DTD. 在HTML5中&l

2017前端面试题之Css篇(1)

1 . CSS 属性是否区分大小写? 答:不区分. HTML,CSS都对大小写不敏感,但为了更好的可读性和团队协作一般都小写,而在XHTML 中元素名称和属性是必须小写的. 2 . 行内(inline)元素 设置margin-top和margin-bottom 是否起作用?padding-top和padding-bottom是否会增加它的高度? 答:行内元素又分为替换元素(replaced element)和非替换元素(non-replaced element). 替换元素: 是指用作为其他内容