CSS面试题(一)

一、垂直居中,多行文本垂直居中?

1、单行文本垂直居中
设置高度height和行高line-height,使高度height等于行高line-height
2、多行未知高度文字的垂直居中
设定Padding值,使padding-top等于padding-bottom
优点:可以在任何浏览器上运行,代码简单。
缺点:仅限于容器高度是可伸缩的情况。
3、多行文本固定高度的居中。
使用三层嵌套的div,假定三个div由外到内的id值分别为wrap、subwrap和content.
对wrap设置 display:table;
对subwrap设置 display:table-cell; vertical-align:middle;
针对IE6/7的兼容性处理:
运用CSS hack——
对wrap设置 *position:relative;
对subwrap设置 *position:absolute;
*top:50%;
对content设置 *position:relative; *top:-50%;

CSS教程:div垂直居中的N种方法以及多行文本垂直居中的方法

二、如何实现两边固定中间自适应的布局?

1.绝对定位法:左右两侧div采用绝对定位, 中间div的margin-left设为左侧div的宽度, 中间div的 margin-right设为右侧div的宽度。三个div顺序任意。(左右div绝对定位,margin-left,margin-right,三个div顺序任意
2.浮动法:左侧div左浮动,右侧div右浮动, 中间div的margin-left设为左侧div的宽度, 中间部分的 margin-right设为右侧div的宽度。 左右div顺序任意,中间div必须放在最后。(左右div分别左右浮动,margin-left,margin-right,三个div顺序为左右中
3.margin负值法:也叫圣杯布局。在中间div外部包含一个div,包含div需要设置float属性使其形成一个BFC,并设置宽度为100%。左侧div的margin-left:-100%,右侧div的margin-left:右侧div的宽度的负值。中间div必须放在最前面,左右div顺序任意。
参考博文1参考博文2

三、两列自适应布局

左边固定,右边自适应

1、
左div:固定宽度和左浮动。
右div:margin-left=左边div宽度+两列间距,宽度100%。

<div class="left">left</div>
<div class="main">main</div>
.left {
    float: left;
    width: 100px;
    background:red;
}
.main {
    margin-left: 110px;
    width: 100%;
    background:blue;
}

原理分析:根元素会生成BFC,因此left div和main div的左边会与包含块的border box的左边相接触。因此可以设置main左外边距margin-left为left的宽度。从而使main的content部分处于自适应的可视区。

2、
左div:左浮动,固定宽度。
右div:overflow: hidden;或overflow:auto

.left {
    float: left;
    width: 100px;
    background:red;
}
.main {
    overflow: hidden; //或overflow:auto
    background:blue;
}

原理分析:根元素会生成BFC,因此left div和main div的左边会与包含块的border box的左边相接触。因为BFC的区域不会和float box重叠,因此可以设置main为overflow:hidden或overflow:auto,使main生成BFC。

右边固定,左边自适应

1、

.main{
    width:100%;
    float:left;
    margin-right:-200px;
    background:red;
    }
.right{
    width:200px;
    float:right;
    background:blue;
    }

原理分析:右边固定宽度,右浮动。左边想自适应屏幕宽度必须设置宽度100%,这时候左边会占满一行。浮动元素被挤到下一行。因此要设置main 为float:left,使main生成BFC,BFC的区域就不会和float box重叠。这时候左边还是占满一整行,并没有给右浮动的区域留位置,因此要设置main margin-right负边距,大小为右边的宽度。

两列自适应布局

四、清除浮动的方法有哪些?

浮动问题

清除浮动后

1.给父级div设置 height
原理:给父级div设置height值,从而解决父级div无法自动获取高度的问题。
缺点:只适合高度固定的布局。

<style type="text/css"> 
.superdiv{background:#000080;border:1px solid red;/*清除浮动代码*/ height:200px;} 
.float{float:left;width:200px;height:200px;background:#DDD} 
</style>

<div class="superdiv "> 
<div class="float">float:left;</div> 
</div> 

2.在浮动元素后面加空的div标签
原理:在浮动元素后添加一个空div标签,在空div的样式中设置clear:both清除浮动,让父级div能自动获取到高度。
缺点:如果页面浮动布局多,就要增加很多空div标签。

<style type="text/css"> 
.superdiv{background:#000080;border:1px solid red;} 
.float{float:left;width:200px;height:200px;background:#DDD} 
/*清除浮动代码*/
.clearfloat{clear:both;}
</style>

<div class="superdiv "> 
<div class="float">float:left;</div> 
<!--添加空div标签-->
<div class="clearfloat"></div>
</div> 

3.给父级div设置伪类:after和zoom
原理:IE8以上和非IE浏览器才支持:after,对父级div的伪类after设置clear:both清除浮动,让父级div能够自动获取高度;zoom(IE专有属性)用于解决ie6,ie7浮动问题 。

<style type="text/css"> 
.superdiv{background:#000080;border:1px solid red;} 
.float{float:left;width:200px;height:200px;background:#DDD} 
/*清除浮动代码*/
.clearfloat:after{display:block;clear:both;content:"";visibility:hidden;height:0;}
.clearfloat{zoom:1;}
</style>

<div class="superdiv clearfloat "> 
<div class="float">float:left;</div> 
</div>

4.给父级div设置 overflow:hidden
原理:使用overflow:hidden时,必须设置父级div的width或zoom:1,同时不能设置height,浏览器会自动检查浮动区域的高度 。
缺点:不能和position配合使用,因为超出的尺寸的会被隐藏。

<style type="text/css"> 
.superdiv{background:#000080;border:1px solid red;/*清除浮动代码*/width:100%;overflow:hidden;} 
.float{float:left;width:200px;height:200px;background:#DDD} 
</style>

<div class="superdiv "> 
<div class="float">float:left;</div> 
</div> 

5.给父级div设置 overflow:auto
原理:使用overflow:auto时,必须设置父级div的width或zoom:1,同时不能设置height,浏览器会自动检查浮动区域的高度 。

<style type="text/css"> 
.superdiv{background:#000080;border:1px solid red;/*清除浮动代码*/width:100%;overflow:auto;} 
.float{float:left;width:200px;height:200px;background:#DDD} 
</style>

<div class="superdiv "> 
<div class="float">float:left;</div> 
</div> 

追问1:overflow:hidden清除浮动的原理是什么?

四、页面滚动较卡,该怎么优化?

1、防抖
在设定时间内没有连续触发两次scroll事件,才会触发真正想在 scroll 事件中触发的函数。
存在问题:图片懒加载。连续滚动下滑过程中图片不会被加载出来,只有停止下滑时候,图片才被加载出来。
2、节流
即使页面不断被滚动,被连续触发scroll事件,scroll 事件中的函数也可以以固定的频率被触发。
3、简化 scroll 内的操作
将一些变量的初始化、不依赖于滚动位置变化的计算等都应当在 scroll 事件外提前就绪。避免在scroll 事件中修改样式属性。
4、使用 pointer-events: none 禁止鼠标事件
滑动过程中给 <body> 添加上 pointer-events: none 的样式,禁止鼠标事件,减少了hover和click等鼠标事件的触发,滚动结束之后,再移除该样式。

另外,滚动优化其实不仅指滚动(scroll 事件),还包括了例如 resize 这类会频繁触发页面渲染的事件。
[【前端性能】高性能滚动 scroll 及页面渲染优化]](http://www.cnblogs.com/coco1s/p/5499469.html)

五、使用css实现一个三角形(盒模型border和css旋转两种方法,主要考察css3旋转)

1、css border

#triangle-up {
     width: 0;
    height: 0;
    /*注意:上色的border必须设置solid才能显示颜色*/
    border-left: 60px solid transparent;/*transparent:color值为透明色*/
    border-right: 60px solid transparent;
    border-bottom: 100px solid red;
}

<div id="triangle-up"></div>

2、css旋转正方形
1)创建2个嵌套的div。
2)将内部的div旋转45°,获得菱形。
3)将菱形的块向顶部偏移,父级div设置overflow:hidden;

#div1{
    position:relative;
    width:100px;
    height:100px;
    overflow:hidden;
    }
#div2{
    position:absolute;
    width:100px;
    height:100px;
    background:red;
    top:-70%;   
    -webkit-transform:rotate(45deg);
    -moz-transform:rotate(45deg);
    -o-transform:rotate(45deg);
    transform:rotate(45deg);
    }

<div id="div1">
<div id="div2" class="transform"></div>
</div>

注意:css3旋转需要考虑浏览器兼容性。

.transform {
    -webkit-transform:rotate(45deg);
    -moz-transform:rotate(45deg);
    -o-transform:rotate(45deg);
    transform:rotate(45deg);
}
/*ie7-9要用matrix filter*/
.ie-transform-filter{
-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(
    M11=0.707,
    M12=-0.707,
    M21=0.707,
    M22=0.707,  
SizingMethod='auto expand'  
)";
filter:progid:DXImageTransform.Microsoft.Matrix(
    M11=0.707,
    M12=-0.707,
    M21=0.707,
    M22=0.707,  
SizingMethod='auto expand'  
);
}

六、绝对定位与相对定位的区别

relative: 相对定位,相对于自己在文档流中的位置进行偏移,并且原来在文档流中占有的位置得以保留。
absolute;绝对定位,相对于自己向父级元素查找出的第一个带有position属性的元素进行偏移,并且脱离文档流,原来在文档流中所占用的位置不保留。

七、CSS实现矩形按钮右边缘的中间有个往里凹的小半圆,如图:

<!DOCTYPE html>
<html>
    <head>
    <meta charset="UTF-8">
    <title>test</title>
    <style>
      .btn {
        width: 100px;
        text-align: center;
        height: 50px;
        line-height: 50px;
        background: #000;
        color: #fff;
        position: relative;
      }
      .btn:after {
        position: absolute;
        content: '';
        width: 30px;
        height: 30px;
        background: #fff;
        top: 10px;
        right: -15px;
        border-radius: 100%;
      }
    </style>
</head>
<body>
 <div class="btn">
   button
 </div>
    </body>
</html>

参考文献:
CSS实现矩形按钮右边缘的中间有个往里凹的小半圆

八、用css实现九宫格

.wrap{
    width:306px;
    height:306px;
    display:flex;
    flex-wrap:wrap;
    background:red;
    }
.content{
    width:100px;
    height:100px;
    line-height:100px;
    text-align:center;
    color:white;
    border:1px solid white;
    background:blue;
    }
<div class="wrap">
<div class="content">1</div>
<div class="content">2</div>
<div class="content">3</div>
<div class="content">4</div>
<div class="content">5</div>
<div class="content">6</div>
<div class="content">7</div>
<div class="content">8</div>
<div class="content">9</div>
</div>

关键点:
①外面的包裹的元素设置display:flex和flex-wrap:wrap。

九、css3动画有哪些实现方式?

transform:变换主要实现旋转,缩放,倾斜,移动的2D或3D变形。
Transitions:从一个属性值平滑过渡到另一个属性值。
Animations:通过设置关键帧在页面上产生复杂的动画效果。

十、CSS3的新功能

1、边框
1)圆角 border-radius,IE不支持。
2)图片边框 border-image
2、多背景
向后兼容会是一个很大的问题。
3、@font-face 使用自定义字体
Firefox的最新版本将支持该功能,Safari,Opera甚至IE也将支持或已经支持该功能,我们会看到该功能的广泛应用,只是字体的版权问题会很麻烦。
4、动画 transform Transitions Animations
5、渐变色 gradient
6、Box阴影
7、RGBa-加入透明色
RGBa中的a代表透明色,IE不支持。
8、文字阴影 text-shadow
9、新增各种CSS选择器 (: not(.input):所有 class 不是“input”的节点)
10、多列布局 multi-column layout

参考文献:
CSS3八大新功能

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,695评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,569评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,130评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,648评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,655评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,268评论 1 309
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,835评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,740评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,286评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,375评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,505评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,185评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,873评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,357评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,466评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,921评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,515评论 2 359

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,759评论 1 92
  • 在微信公众号上看到一些有趣的CSS面试题,在此做一下记录。css是前端的基础,但是或许很多人都会忽视其一些属性和样...
    琉璃元宝阅读 539评论 0 4
  • 1.CSS基本概念 1.1 CSS的定义 CSS(Cascading Style Sheets)层叠样式表,主要用...
    寥寥十一阅读 1,839评论 0 6
  • 请参看我github中的wiki,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon阅读 7,133评论 2 19
  • 原来最不经意 却又不忍离弃的 便是我们最终要守护的东西
    允念念阅读 151评论 0 2