css面试题总结(转)
转自此网页http://www.cnblogs.com/YangqinCao/p/5721810.html。
1、两栏布局,左边栏宽度固定,适应父元素高度变化
首先分析两栏布局,
两栏布局两种常见方法,
.left{
width:200px;
float:left;
}
.main{
margin-left:200px;
}
.left{
width:200px;
position:absolute;
top:0;
left:0;
}
.main{
margin-left:200px;
}
对于第一种方法,使用float,可以通过将左边栏的padding-bottom设置为足够大的值,然后为margin-bottom设置同样大小的负值,用以弥补padding造成的长度过长,然后设置父元素overflow:hidden
.container{
overflow:hidden;
}
.left{
width:200px;
float:left;
padding-bottom:5000px;
margin-bottom:-5000px;
}
.main{
margin-bottom:210px;
}
演示:https://cdn.rawgit.com/Yangqin0607/ife.baidu/master/mianshi/%E5%B1%85%E4%B8%AD/test2.html
对于第二种方法,使用absolute,使得左边栏脱离了文档流,但是高度还需要随父元素高度变化怎么办呢?
.left{
width:200px;
position:absolute;
top:0;
left:0;
bottom:0;//第一种方法,设置为bottom为0;第二种方法设置高度100%;
}
.main{
margin-left:200px;
}
演示:https://cdn.rawgit.com/Yangqin0607/ife.baidu/master/mianshi/%E5%B1%85%E4%B8%AD/test1.html
.parent{
position: relative;
}
.left{
position: absolute;
top: 0px;
width: 200px;
height: 100%;
}
.main{
margin-left: 210px;
}
演示:https://cdn.rawgit.com/Yangqin0607/ife.baidu/master/mianshi/%E5%B1%85%E4%B8%AD/test6.html
2、水平垂直居中
1)子元素宽高已知
.element {
width: 600px; height: 400px;
position: absolute; left: 50%; top: 50%;
margin-top: -200px; /* 高度的一半 */
margin-left: -300px; /* 宽度的一半 */
}
.element {
width: 600px; height: 400px;
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
margin: auto; /* 有了这个就自动居中了 */
}
演示地址:https://cdn.rawgit.com/Yangqin0607/ife.baidu/master/mianshi/%E5%B1%85%E4%B8%AD/test3.html
2)子元素宽高未知
.element{
position:absolute;
left:50%;
top:50%;
transform:translate(-50%,-50%);//有兼容性问题
}
3) 多行文字垂直居中
<div class="container">
<div class="child">
<span>
我是第一行文字<br/>
我是第二行文字<br/>
我是第三行文字<br/>
我是第四行文字<br/>
我是第五行文字
</span>
</div>
</div>
.child{
height:600px;
background-color:pink;
line-height:600px;
text-align:center
}
.child span{
display:inline-block;
line-height:1.5em;
vertical-align:center;
}
4) 图片垂直居中方法
div { line-height: 240px; } img { vertical-align: middle; }
效果并不是完全的垂直居中,只是近似
那是因为「幽灵空白节点」高度行高撑开,其垂直中心是字符content area的中心,而对于字符x
而言,都是比绝对中心位置要下沉的(不同字体下沉幅度不一样),换句更易懂的描述就是x
的中心位置都是在字符内容区域高度中心点的下方,而这上下的偏差就是这里图片上下间距的偏差。
middle中线位置(字符x
的中心)并不是字符内容的绝对居中位置。两个位置的偏差就是图片近似居中的偏差。
要想完全垂直居中,最先想到的方法就是让后面的“幽灵字符”也是vertical-align:middle
,然而,既然称之为“幽灵”就表示不会受非继承特性的属性影响,所以,根本没法设置vertical-align:middle
,除非你自己创建一个显示的内联元素。
“幽灵字符”可以受具有继承特性的CSS属性影响,于是,我们可以通过其他东西来做调整,让字符的中线和字符内容中心线在一起,或者说在一个位置上就可以了。
设置font-size:0
, 因此此时content area高度是0,各种乱七八糟的线都在高度为0的这条线上,绝对中心线和中线重合。自然全垂直居中:
<div>
<img src="1.png"> //img后须有空格或换行才能有幽灵空白节点
</div>
.div{
font-size:0;
line-height:200px;
}
img{
vertical-align:middle;
}
参考:http://www.zhangxinxu.com/wordpress/2015/08/css-deep-understand-vertical-align-and-line-height/
演示地址:https://cdn.rawgit.com/Yangqin0607/ife.baidu/master/mianshi/%E5%B1%85%E4%B8%AD/test5.html
3、如何居中一个浮动元素
.div {
width:500px ;
height:300px;
position:relative;相对定位
left:50%;
top:50%;
margin: -150px 0 0 -250px;
}
4、描述下 “reset” CSS 文件的作用和使用它的好处
reset.css能够重置浏览器的默认属性。不同的浏览器具有不同的样式,重置能够使其统一。比如说ie浏览器和FF浏览器下button显示不同,通过reset能够统一样式,显示相同的效果。但是很多reset是没必要的,多写了会增加浏览器在渲染页面的负担。
5、 解释下浮动和它的工作原理
浮动元素脱离文档流,不占据空间。浮动元素碰到包含它的边框或者浮动元素的边框停留。
清除浮动的方式:
1. 在浮动元素后面设置空div,设置clear:both
2. 在浮动元素后面添加换行<br clear="all" />
3. 给父元素添加overflow:hidden;
4. 父元素设置浮动
5. 在父元素上应用:after
.parent:after{
content:".";
display:block;
height:0;
visibility:hidden;
clear:both;
}
.parent{
zoom:1;
}
1) display:block 使生成的元素以块级元素显示,占满剩余空间;
2) height:0 避免生成内容破坏原有布局的高度。
3) visibility:hidden 使生成的内容不可见,并允许可能被生成内容盖住的内容可以进行点击和交互;
4)通过 content:"."生成内容作为最后一个元素,至于content里面是点还是其他都是可以的
5)zoom:1 触发IE hasLayout。
除了clear:both用来清除浮动的,其他代码无非都是为了隐藏掉content生成的内容
Unicode字符里有一个“零宽度空格”,也就是U+200B ,这个字符本身是不可见的,所以我们完全可以省略掉 visibility:hidden了
.parent{
content:"\200b";
display:block;
height:0;
clear;both;
}
.parent{
zoom:1;
}
方法3,4,5都是因为生成了BFC,计算BFC的高度时,浮动元素也参与计算,由此解决了父元素的高度塌陷问题。
BFC:http://www.cnblogs.com/YangqinCao/p/5421898.html
详见:http://www.jb51.net/css/67471.html
浮动的问题
浮动因脆弱而饱受诟病。大多数的脆弱性来自于 IE6 及其一系列的浮动相关 bug。因为越来越多的设计师不再支持 IE6 了,你也可以不关注它了。不过对于那些要关注的人来说,这里有些大概。
- 推倒是浮动元素内的元素(大多是图片)比浮动元素本身宽造成的现象。大多数的浏览器会在浮动之外渲染图片,但是不会有伸出来的部分影响其他布局。IE 会扩展浮动来包含图片,经常大幅度地影响布局。一个普遍的例子是突破伸出主内容之外把侧栏推到下面。
快速修正:确保不是图片造成这种情况,使用 overflow:hidden 来切除多余的部分。
- 双倍边距bug处理 IE6 时,另一个需要记住的事情是,如果在和浮动方向相同的方向上设置外边距(margin),会引发双倍边距。快速修正:给浮动设置 display:inline; 而且不用担心,它依然是块级元素。
- 3像素间距是指挨着浮动元素的文本会神奇的被踢出去3像素,好像浮动元素的周围有一个奇怪的力场一样。快速修正:在受影响的文本上设置宽度或高度。
- IE7 中,底边距 bug是当浮动父元素有浮动子元素时,这些子元素的底边距会被父元素忽略掉。快速修正:用父元素的底内补白(padding)代替。
详见:http://www.cnblogs.com/hnyei/archive/2011/09/27/2193133.html
6、relative、fixed、absolute 和 static 元素的区别
position有3个属性:static absolute relative fixed
static:元素没有定位,在文档流中出现在正常的位置。默认值,忽略 top, bottom, left, right 或者 z-index 声明。
absolute:绝对定位,脱离文档流,相对于最近的属性不为static的父元素位置。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。可通过z-index进行层次分级。
relative:相对定位,相对于原来文档流中正常出现的位置的偏移,但其在文本流中的位置依然存在。通过top,bottom,left,right的设置相对于其正常位置进行定位。可通过z-index进行层次分级。
fixed: 元素框的表现类似于将position设置为absolute,不过其包含块是视窗本身。相对于浏览器窗口进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。可通过z-index进行层次分级。
inherit 规定从父元素继承 position 属性的值。
7、inline-block和float区别
1)文档流:浮动元素会脱离文档流,并使得周围元素环绕这个元素。而inline-block元素仍在文档流内。因此设置inline-block不需要清除浮动。当然,周围元素不会环绕这个元素
2)水平位置:很明显你不能通过给父元素设置text-align:center让浮动元素居中。事实上定位类属性设置到父元素上,均不会影响父元素内浮动的元素。但是父元素内元素如果设置了display:inline-block,则对父元素设置一些定位属性会影响到子元素。(这还是因为浮动元素脱离文档流的关系)。
3)垂直对齐:inline-block元素沿着默认的基线对齐。浮动元素紧贴顶部。你可以通过vertical属性设置这个默认基线,但对浮动元素这种方法就不行了。这也是我倾向于inline-block的主要原因。
4)空白:inline-block包含html空白节点。如果你的html中一系列元素每个元素之间都换行了,当你对这些元素设置inline-block时,这些元素之间就会出现空白。而浮动元素会忽略空白节点,互相紧贴。
为了删除这些空白,可以删除HTML中的空白;使用负的外边距;给父元素设置font-size:0
原文:http://blog.163.com/zx_1258/blog/static/1332337992012111184519374/
怎么使用:
- 使用inline-block:当你需要控制元素的垂直对齐跟水平排列时,使用inline-block。
- 使用浮动:当你需要让元素环绕某一个元素时,或者需要支持旧版本ie,或者不想处理inline-block带来的空白问题时,使用浮动。
8、常见兼容性问题?
1)png24位的图片在iE6浏览器上出现背景,解决方案是做成PNG8.
2)浏览器默认的margin和padding不同。解决方案是加一个全局的*{margin:0;padding:0;}来统一。
3)IE6双边距bug:块属性标签float后,设置水平margin时,在ie6显示margin比设置的大。
浮动ie产生的双倍距离 :#box{ float:left; width:10px; margin:0 0 0 10px;}
解决方案:在float的标签样式控制中加入 display:inline;将其转化为行内属性
4)IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义属性;
Firefox下,只能使用getAttribute()获取自定义属性.
解决方法:统一通过getAttribute()获取自定义属性.
5)IE下,even对象有x,y属性,但是没有pageX,pageY属性;Firefox下,event对象有pageX,pageY属性,但是没有x,y属性.
解决方法:(条件注释)缺点是在IE浏览器下可能会增加额外的HTTP请求数。
6)Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示,解决方案:加入 CSS 属性 -webkit-text-size-adjust: none; //测试有点问题,在看看
7)超链接访问过后hover样式就不出现了 点击访问过的超链接样式不在具有hover和active了解决方法是改变CSS属性的排列顺序:
L-V-H-A : a:link {} a:visited {} a:hover {} a:active {}
8)设置较小高度标签(一般小于10px),在IE6,IE7,遨游中高度超出自己设置高度
问题症状:IE6、7和遨游里这个标签的高度不受控制,超出自己设置的高度
解决方案:给超出高度的标签设置overflow:hidden;或者设置行高line-height 小于你设置的高度。
备注:这种情况一般出现在我们设置小圆角背景的标签里。出现这个问题的原因是IE8之前的浏览器都会给标签一个最小默认的行高的高度。即使你的标签是空的,这个标签的高度还是会达到默认的行高。
9)图片默认有间距
问题症状:几个img标签放在一起的时候,有些浏览器会有默认的间距,加了通配符也不起作用。
解决方案:使用float属性为img布局
备注:因为img标签是行内属性标签,所以只要不超出容器宽度,img标签都会排在一行里,但是部分浏览器的img标签之间会有个间距。去掉这个间距使用float是正道。(也可以使用负margin,虽然能解决,但负margin本身就是容易引起浏览器兼容问题的用法)
10)标签设置min-height不兼容
问题症状:因为min-height本身就是一个不兼容的CSS属性,所以设置min-height时不能很好的被各个浏览器兼容
解决方案:如果我们要设置一个标签的最小高度200px,需要进行的设置为:{min-height:200px; height:auto !important; height:200px; overflow:visible;}
备注:当内容小于一个值(如300px)时。容器的高度为300px;当内容高度大于这个值时,容器高度被撑高,而不是出现滚动条。这时候我们就会面临这个兼容性问题。
11)3像素问题:ie6下,当浮动元素与流动元素并列显示时,他们之间会存在三像素问题。
12)当定义行内元素为包含框时,且包含框包含的绝对定位元素以百分比为单位进行定位时,会出现混乱。
13)opacity 定义元素的不透明度
14)z-index不起作用的 bug
1)ie6下 首先讲讲第一种z-index无论设置多高都不起作用情况。这种情况发生的条件有三个:1、父标签position属性为relative;2、问题标签含有浮动(float)属性。
2)父标签position属性为relative或absolute时,子标签的absolute属性是相对于父标签而言的。而在IE6下,层级的表现有时候不是看子标签的z-index多高,而要看它们的父标签的z-index谁高谁低。
15)使用hacker可以把浏览器分为3类:IE6 ;IE7和遨游;其他(IE8 chrome ff safari opera等)
◆IE6认识的hacker 是下划线_ 和星号 *
◆IE7 遨游认识的hacker是星号 *
内容摘自:http://www.cnblogs.com/duanhuajian/archive/2012/09/23/2699119.html http://blog.csdn.net/chuyuqing/article/details/37561313/
9、页面导入样式时,使用link和@import有什么区别?
区别1:link是XHTML标签,除了加载CSS外,还可以定义RSS等其他事务;@import属于CSS范畴,只能加载CSS。
区别2:link引用CSS时,在页面载入时同时加载;@import需要页面网页完全载入以后加载。
区别3:link是XHTML标签,无兼容问题;@import是在CSS2.1提出的,低版本的浏览器不支持。
区别4:link支持使用Javascript控制DOM去改变样式;而@import不支持。
<link rel="stylesheet" rev="stylesheet" href="CSS文件" type="text/css" media="all" />
<style type="text/css" media="screen">
@import url("CSS文件"); 或者 @import url(style.css)
</style>
10、行内元素有哪些?块级元素有哪些? 空(void)元素有那些?
首先:CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,如div的display默认值为“block”,则为“块级”元素;span默认display属性值为“inline”,是“行内”元素。
(1)行内元素有:a b span img input select strong(强调的语气)
(2)块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p
(3)常见的空元素:
<br> <hr> <img> <input> <link> <meta>
鲜为人知的是:
<area> <base> <col> <command> <embed> <keygen> <param> <source> <track> <wbr>
css面试题总结(转)的更多相关文章
- 前端Html和Css面试题
前端Html和Css面试题Html篇:1.你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么? IE: trident内核 Firefox:gecko内核 Safari:webkit内核 Ope ...
- 一道灵活的css笔试题
今天在网上看到一css笔试题,乍一看很简单,实则内部暗藏玄机,题目大概是:九宫格,每格长宽50px,边框宽度5px,鼠标经过边框变红,效果如下: 鼠标路过时: 以下是代码(如有不足之处望多加指正) & ...
- 2019前端面试系列——CSS面试题
盒模型 /* 红色区域的大小是多少?200 - 20*2 - 20*2 = 120 */ .box { width: 200px; height: 200px; padding: 20px; marg ...
- CSS面试题&知识点汇总
问题&答案 介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的? 有两种, IE 盒子模型.W3C 盒子模型: 盒模型: 内容(content).填充(padding).边界(m ...
- css面试题汇总 (持续更新)
前言:这篇随笔是为了准备后面的面试而整理的,网上各种面试题太多了,但是我感觉很多太偏了,而且实际开发过程中并不会遇到,因此这里我整理一些比较常用的,或者是相对比较重要的知识点,每个知识点都会由浅入深, ...
- HTML css面试题
1.对WEB标准以及W3C的理解与认识 标签闭合.标签小写.不乱嵌套.提高搜索机器人搜索几率.使用外链css和js脚本.结构行为表现的分离.文件下载与页面速度更快.内容能被更多的用户所访问.内容能被更 ...
- 【css面试题】三个DIV要求水平对齐,左右两个DIV宽度固定为100px,中间那个DIV充满剩余的宽度(至少2种方法)
这是我在一家公司面试时遇到的问题,当时没有答上来!! 所以看到的小伙伴一定要注意了!! 变化浏览器宽度可看到效果: 左 右 中 然后我们来看看代码: 第一种方法:(浮动) <style type ...
- 记一道css面试题 : 三栏布局两边宽度固定,中间宽度自适应,并且布局随屏幕大小改变。
前几天面试时有道css题没做出来,回来好好学习一番后把其记录下来. 题目是这样的:左中右三栏布局,左右两栏宽度固定,左右两栏的宽度为200像素,中间栏宽度自适应.当屏幕小于600px时,3栏会分别占用 ...
- CSS面试题
1.有哪些方式可以对一个DOM设置它的CSS样式? 外部样式表.引入一个外部CSS文件: 内部样式表.将CSS代码放在<head>标签内部: 内联样式,将CSS样式直接定义在HTML元素内 ...
- CSS笔试题
如何实现移动端9宫格 如何实现移动端下列8宫格 实现移动端图片画廊CSS样式 写一个简单的animation的css动画 美化select,radio,range样式,只需考虑谷歌浏览器,下面给出的是 ...
随机推荐
- 洛谷p1008 三连击
https://www.luogu.org/problemnew/show/P1008 题目描述 将1,2,3,4,5,6,7,8,9共9个数分成3组,分别组成3个三位数,且使这3个三位数的值构成1: ...
- IndentationError: expected an indented block错误
Python语言是一款对缩进非常敏感的语言,给很多初学者带来了困惑,即便是很有经验的python程序员,也可能陷入陷阱当中.最常见的情况是tab和空格的混用会导致错误,或者缩进不对,而这是用肉眼无法分 ...
- 基于TensorFlow理解CNN中的padding参数
1 TensorFlow中用到padding的地方 在TensorFlow中用到padding的地方主要有tf.nn.conv2d(),tf.nn.max_pool(),tf.nn.avg_pool( ...
- 2019-8-8-WPF-非客户区的触摸和鼠标点击响应
title author date CreateTime categories WPF 非客户区的触摸和鼠标点击响应 lindexi 2019-08-08 16:48:31 +0800 2019-07 ...
- Python numpy.transpose 详解
前言 看Python代码时,碰见 numpy.transpose 用于高维数组时挺让人费解,通过一番画图分析和代码验证,发现 transpose 用法还是很简单的. 正文 Numpy 文档 numpy ...
- 部分树形DP的优化
ural1018. Binary Apple Tree 题目大意 有一棵n个节点的树,树上每个节点有一个值,选择m个节点使这些节点值的和最大 要求:如果选当前节点,则必须选它的父节点 解法: 我们设d ...
- LuoguP3690 【模板】Link Cut Tree (动态树) LCT模板
P3690 [模板]Link Cut Tree (动态树) 题目背景 动态树 题目描述 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 0:后接两 ...
- Leetcode138. Copy List with Random Pointer复制带随机指针的链表
给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的深度拷贝. 方法一: class Solution { public: RandomLis ...
- Leetcode129. Sum Root to Leaf Numbers求根到叶子节点数字之和
给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字. 例如,从根到叶子节点路径 1->2->3 代表数字 123. 计算从根到叶子节点生成的所有 ...
- MySQL系列(十)--用户权限及远程访问
本文基于MySQL8.0,记录一下完整的远程访问的过程,以及这个过程中可能遇到的问题,MySQL运行在阿里云服务器,操作系统:CentOS 7.6 64位 顺便说下,买服务器还是要双十二这种拉新活动再 ...