1.介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的?
标准盒子模型:宽度=内容的宽度(content)+ border + padding + margin
低版本IE盒子模型:宽度=内容宽度(content+border+padding)+ margin
2.box-sizing属性?
用来控制元素的盒子模型的解析模式,默认为content-box
context-box:W3C的标准盒子模型,设置元素的 height/width 属性指的是content部分的高/宽
border-box:IE传统盒子模型。设置元素的height/width属性指的是border + padding + content部分的高/宽
3 CSS选择器有哪些?哪些属性可以继承?
CSS选择符:id选择器(#myid)、类选择器(.myclassname)、标签选择器(div, h1, p)、相邻选择器(h1 + p)、子选择器(ul > li)、后代选择器(li a)、通配符选择器(*)、属性选择器(a[rel=”external”])、伪类选择器(a:hover, li:nth-child)
可继承的属性:font-size, font-family, color
不可继承的样式:border, padding, margin, width, height
优先级(就近原则):!important > [ id > class > tag ]
!important 比内联优先级高
4.CSS优先级算法如何计算?
元素选择符: 1
class选择符: 10
id选择符:100
元素标签:1000
!important声明的样式优先级最高,如果冲突再进行计算。
如果优先级相同,则选择最后出现的样式。
继承得到的样式的优先级最低。
5.CSS3新增伪类有那些?
p:first-of-type 选择属于其父元素的首个元素
p:last-of-type 选择属于其父元素的最后元素
p:only-of-type 选择属于其父元素唯一的元素
p:only-child 选择属于其父元素的唯一子元素
p:nth-child(2) 选择属于其父元素的第二个子元素
:enabled :disabled 表单控件的禁用状态。
:checked 单选框或复选框被选中。
6.display有哪些值?说明他们的作用?
inline(默认)–内联
none–隐藏
block–块显示
table–表格显示
list-item–项目列表
inline-block
7.position的值?
static(默认):按照正常文档流进行排列;
relative(相对定位):不脱离文档流,参考自身静态位置通过 top, bottom, left, right 定位;
absolute(绝对定位):参考距其最近一个不为static的父级元素通过top, bottom, left, right 定位;
fixed(固定定位):所固定的参照对像是可视窗口。
8.常见的兼容性问题?
不同浏览器的标签默认的margin和padding不一样。*{margin:0;padding:0;}
IE6双边距bug:块属性标签float后,又有横行的margin情况下,在IE6显示margin比设置的大。hack:display:inline;将其转化为行内属性。
渐进识别的方式,从总体中逐渐排除局部。首先,巧妙的使用“9”这一标记,将IE浏览器从所有情况中分离出来。接着,再次使用“+”将IE8和IE7、IE6分离开来,这样IE8已经独立识别。
9.前端页面由哪三层构成,分别是什么?作用是什么?
结构层 Html 表示层 CSS 行为层 js
10.清除浮动的几种方式,各自的优缺点
1.使用空标签清除浮动clear:both(缺点,增加无意义的标签,让人感觉很不爽)
2.使用overflow:auto(使用zoom:1用于兼容IE,缺点:内部宽高超过父级div时,会出现滚动条)
3.是用afert伪元素清除浮动(IE8以上和非IE浏览器才支持,目前:大型网站都有使用,如:腾迅,网易,新浪等等)
11.position的值, relative和absolute定位原点是?
*absolute:生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。
*fixed:生成绝对定位的元素,相对于浏览器窗口进行定位。
*relative:生成相对定位的元素,相对于其正常位置进行定位。
static 默认值。没有定位,元素出现在正常的流中
(忽略 top, bottom, left, right z-index 声明)。
inherit 规定从父元素继承 position 属性的值。
12.display:inline-block 什么时候会显示间隙?
移除空格、使用margin负值、使用font-size:0、letter-spacing、word-spacing
13.display:none和visibility:hidden的区别?
display:none 隐藏对应的元素,在文档布局中不再给它分配空间,它各边的元素会合拢,
就当他从来不存在。
visibility:hidden 隐藏对应的元素,但是在文档布局中仍保留原来的空间。
14.CSS中link 和@import的区别是?
A:(1) link属于HTML标签,而@import是CSS提供的; (2) 页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;(3) import只在IE5以上才能识别,而link是HTML标签,无兼容问题; (4) link方式的样式的权重 高于@import的权重.
15.经常遇到的浏览器的兼容性有哪些?原因,解决方法是什么,常用hack的技巧 ?
* png24位的图片在iE6浏览器上出现背景,解决方案是做成PNG8.
* 浏览器默认的margin和padding不同。解决方案是加一个全局的*{margin:0;padding:0;}来统一。
* IE6双边距bug:块属性标签float后,又有横行的margin情况下,在ie6显示margin比设置的大。
浮动ie产生的双倍距离 #box{ float:left; width:10px; margin:0 0 0 100px;}
这种情况之下IE会产生20px的距离,解决方案是在float的标签样式控制中加入 ——display:inline;将其转化为行内属性。(这个符号只有ie6会识别)
渐进识别的方式,从总体中逐渐排除局部。
首先,巧妙的使用“\9”这一标记,将IE游览器从所有情况中分离出来。
接着,再次使用“+”将IE8和IE7、IE6分离开来,这样IE8已经独立识别。
css
.bb{undefined
background-color:#f1ee18;/*所有识别*/
.background-color:#00deff\9; /*IE6、7、8识别*/
+background-color:#a200ff;/*IE6、7识别*/
_background-color:#1e0bd1;/*IE6识别*/
}
IE下,可以使用获取常规属性的方法来获取自定义属性,
也可以使用getAttribute()获取自定义属性;
Firefox下,只能使用getAttribute()获取自定义属性。
解决方法:统一通过getAttribute()获取自定义属性。
IE下,even对象有x,y属性,但是没有pageX,pageY属性;
Firefox下,event对象有pageX,pageY属性,但是没有x,y属性。
解决方法:(条件注释)缺点是在IE浏览器下可能会增加额外的HTTP请求数。
Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示,
可通过加入 CSS 属性 -webkit-text-size-adjust: none; 解决。
超链接访问过后hover样式就不出现了 被点击访问过的超链接样式不在具有hover和active了解决方法是改变CSS属性的排列顺序:
L-V-H-A : a:link {} a:visited {} a:hover {} a:active {}
16.li与li之间有看不见的空白间隔是什么原因引起的?有什么解决办法?
行框的排列会受到中间空白(回车\空格)等的影响,因为空格也属于字符,这些空白也会被应用样式,占据空间,所以会有间隔,把字符大小设为0,就没有空格了。
17.position:fixed;在android下无效怎么处理?
fixed的元素是相对整个页面固定位置的,你在屏幕上滑动只是在移动这个所谓的viewport,原来的网页还好好的在那,fixed的内容也没有变过位置,
所以说并不是iOS不支持fixed,只是fixed的元素不是相对手机屏幕固定的
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"/>
18.css多列等高如何实现?
利用padding-bottom|margin-bottom正负值相抵;
设置父容器设置超出隐藏(overflow:hidden),这样子父容器的高度就还是它里面的列没有设定padding-bottom时的高度
当它里面的任 一列高度增加了,则父容器的高度被撑到里面最高那列的高度
其他比这列矮的列会用它们的padding-bottom补偿这部分高度差
19.行内元素有哪些?块级元素有哪些? 空(void)元素有那些?
首先:CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,如div的display默认值为“block”,则为“块级”元素;span默认display属性值为“inline”,是“行内”元素
行内元素有:a b span img input select strong(强调的语气)
块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p
常见的空元素:
***行内元素***:
a - 锚点,em - 强调,strong - 粗体强调,span - 定义文本内区块,i - 斜体,img - 图片,b - 粗体,label - 表格标签,select - 项目选择,textarea - 多行文本输入框,sub - 下标,
sup - 上标,q - 短引用;
***块元素***:
div - 常用块级,dl - 定义列表,dt,dd,ul- 非排序列表,li,ol-排序表单,p-段落,h1,h2,h3,h4,h5-标题,table-表格,fieldset - form控制组,form - 表单,
***空元素***:
br-换行,hr-水平分割线;
20.对WEB标准以及W3C的理解与认识?
(1)web标准规范要求,书写标签必须闭合、标签小写、不乱嵌套,可提高搜索机器人对网页内容的搜索几率;
(2)建议使用外链css和js脚本,从而达到结构与行为、结构与表现的
分离,提高页面的渲染速度,能更快地显示页面的内容;
(3)样式与标签的分离,更合理的语义化标签,使内容能被更多的用户
所访问、内容能被更广泛的设备所访问、更少的代码和组件, 从而降低
维护成本、改版更方便;
(4)不需要变动页面内容,便可提供打印版本而不需要复制内容,提高
网站易用性;遵循w3c制定的web标准,能够使用户浏览者更方便的阅读,使网页开发者之间更好的交流。
20.xhtml和html有什么区别?
HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言;
最主要的不同:
XHTML 元素必须被正确地嵌套。
XHTML 元素必须被关闭。
标签名必须用小写字母。
XHTML 文档必须拥有根元素。
21.Doctype? 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?
用于声明文档使用那种规范(html/Xhtml)一般为 严格 过度 基于框架的html文档
加入XMl声明可触发,解析方式更改为IE5.5 拥有IE5.5的bug
22..为什么没有办法定义1px左右的宽度容器(IE6默认的行高造成的,使用over:hidden,zoom:0.08 line-height:1px);
23.标签上title与alt属性的区别是什么?
alt属性是在你的图片因为某种原因不能加载时在页面显示的提示信息,它会直接输出在原本加载图片的地方;
title属性是在你鼠标悬停在该图片上时显示一个小提示,鼠标离开就没有了,有点类似jQuery的hover,你可以自己试试,另外,HTML的绝大多数标签都支持title属性,title属性就是专门做提示信息的;
24.浏览器标准模式和怪异模式之间的区别是什么?
所谓的标准模式是指,浏览器按W3C标准解析执行代码;
怪异模式则是使用浏览器自己的方式解析执行代码,因为不同浏览器解析执行的方式不一样,所以我们称之为怪异模式。
浏览器解析时到底使用标准模式还是怪异模式,与你网页中的DTD声明直接相关,DTD声明定义了标准文档的类型(标准模式解析)文档类型,会使浏览器使用相应的方式加载网页并显示,忽略DTD声明,将使网页进入怪异模式(quirks mode)。
盒子模型 渲染模式的不同
使用 window.top.document.compatMode 可显示为什么模式
25.清除浮动的几种方式,各自的优缺点
1.使用空标签清除浮动 clear:both(理论上能清楚任何标签,增加无意义的标签)
2.使用overflow:hidden(空标签元素清除浮动而不得不增加无意代码的弊端,,使用zoom:1用于兼容IE)
3.是用afert伪元素清除浮动(用于非IE浏览器)
26.什么是块级格式化上下文(BFC),如何工作?
1.规范解释
块格式化上下文(Block Formatting Context,BFC)是Web页面的可视化CSS渲染的一部分,是布局过程中生成块级盒子的区域,也是浮动元素与其他元素的交互限定区域。
2.通俗解释:
BFC 是一个独立的布局环境,可以理解为一个容器,在这个容器中按照一定规则进行物品摆放,并且不会影响其它环境中的物品。
如果一个元素符合触发BFC的条件,则该元素中的布局不受外部影响。
浮动元素会创建BFC,所以浮动元素内部子元素主要受浮动元素影响,两个浮动元素之间是互不影响的。
3.创建方式:
根元素或包含根元素的元素
浮动元素 float = left | right 或 inherit(≠ none)
绝对定位元素 position = absolute 或 fixed
display = inline-block | flex | inline-flex | table-cell 或 table-caption
overflow = hidden | auto 或 scroll (≠ visible)
28.css穿透点击
CSS新属性pointer-events:字面理解是点击鼠标事件,值分别是auto和none。 当使用pointer-events:none,表示它将捕获不到任何点击,而只是让事件穿透到它的下面
29.css垂直水平居中的方法?
1.父元素没有高度
2.父元素有高度
在父元素上设置flex,并设置justify-content和align-items为center,使得子元素水平垂直居中,不需要设置子元素
3.定位
使用absolute+margin
子绝父相+子元素四个方向都为0+margin:auto
前提条件:子元素宽高已知
使用absolute+margin
使用margin负值进行相对移动,子绝父相+left、top+margin
前提条件:子元素宽高已知
4.translate代替margin负值
ransform中translate移动就是相对自身宽高,使用translate即可代替margin的计算
transform:translate(-50%,-50%);
5.table
table-cell+vertical-align+text-align
30.移动端实现0.5px
方案1: 伪元素+scale (兼容性最好,推荐)
实现方式:给容器设置伪元素,设置绝对定位,宽高都是200%,边框是1px,然后使用transform:scale(0.5) 让伪元素缩小原来的一半,此时伪元素的边框和容器的边缘重合。
方案2: 伪元素+背景 (适合设置一条边框,没办法展示圆角)
实现方式:给容器设置伪元素,设置绝对定位,高度1px,背景图设置线性渐变,一半有颜色一半透明,视觉上只有0.5px。
方案3: 利用阴影代替边框
特点:方便,能正常展示圆角,而且能实现0.1px等更细的边框,兼容性还行。