通常原则: 类应该应用于概念上类似的元素,这些元素能够出如今同一页面上的多个位置,而ID 应该应用于不一样的惟一的元素css
Normalize 相对「平和」,注重通用的方案,重置掉该重置的样式,保留有用的 user agent 样式,同时进行一些 bug 的修复,这点是 reset 所缺少的。
Reset 相对「暴力」,无论你有没有用,通通重置成同样的效果,且影响的范围很大,讲求跨浏览器的一致性。
http://jerryzou.com/posts/abo...
Normalize.css是一种CSS reset的替代方案。它们的区别有:html
选择Normalize.css ,主要是reset.css为几乎全部的元素施加默认样式,因此须要对全部公共的排版元素从新设置样式,这是一件很麻烦的工做。前端
浮动出现的最开始出现的意义是用来让文字环绕图片而已。
float能够自动包裹元素。
float会致使父容器高度塌陷。float为何会致使高度塌陷:元素含有浮动属性 –> 破坏inline box –> 破坏line box高度 –> 没有高度 –> 塌陷。何时会塌陷:当标签里面的元素只要样子没有实际高度时会塌陷。
浮动会脱离文档流。产生本身的块级格式化上下文。android
首先来看在CSS中叠加上下文造成的缘由:ios
z-index属性 :z-index只能在position属性值为relative或absolute或fixed的元素上有效。
基本原理:z-index值能够控制定位元素在垂直于显示屏方向(Z 轴)上的堆叠顺序(stack order),值大的元素发生重叠时会在值小的元素上面。
使用相对性:z-index值只决定同一父元素中的同级子元素的堆叠顺序。父元素的z-index值(若是有)为子元素定义了堆叠顺序(css版堆叠“拼爹”)。向上追溯找不到含有z-index值的父元素的状况下,则能够视为自由的z-index元素,它能够与父元素的同级兄弟定位元素或其余自由的定位元素来比较z-index的值,决定其堆叠顺序。同级元素的z-index值若是相同,则堆叠顺序由元素在文档中的前后位置决定,后出现的会在上面。因此若是当你发现一个z-index值较大的元素被值较小的元素遮挡了,请先检查它们之间的dom结点关系,多半是由于其父结点含有激活并设置了z-index值的position定位元素web
BFC:块级格式上下文。定义:
浮动元素和绝对定位元素,非块级盒子的块级容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不为“visiable”的块级盒子,都会为他们的内容建立新的块级格式化上下文。
在一个块级格式化上下文里,盒子从包含块的顶端开始垂直地一个接一个地排列,两个盒子之间的垂直的间隙是由他们的margin 值所决定的。两个相邻的块级盒子的垂直外边距会发生叠加。
在块级格式化上下文中,每个盒子的左外边缘(margin-left)会触碰到容器的左边缘(border-left)(对于从右到左的格式来讲,则触碰到右边缘),即便存在浮动也是如此,除非这个盒子建立一个新的块级格式化上下文。chrome
BFC详解: http://www.cnblogs.com/lhb25/...编程
display:blockwindows
display:inline浏览器
display:inline-block
就是将对象呈现为inline对象,可是对象的内容做为block对象呈现。以后的内联对象会被排列在同一行内。
备注:属性为inline-block元素之间的空格或者换行在浏览器上会是一个空白的间隙。且IE6和7是不支持这个属性的,须要经过display:inline;zoom:1作hack处理。
添加新的元素、应用 clear:both
<div class="outer"> <div class="div1">1</div> <div class="div2">2</div> <div class="div3">3</div> <div class="clear"></div> </div> .clear{clear:both; height: 0; line-height: 0; font-size: 0}
优势:简单,代码少,浏览器支持好,不容易出现怪问题
缺点:要增长不少无效布局,但这是清除浮动用的比较多的一种方法。
父级div定义overflow:auto或者hidden
<div class="outer over-flow"> //这里添加了一个class <div class="div1">1</div> <div class="div2">2</div> <div class="div3">3</div> </div> .over-flow{ overflow: auto; zoom: 1; //zoom: 1; 是在处理兼容性问题 }
原理:必须定义width或zoom:1,同时不能定义height,使用overflow属性来清除浮动有一点须要注意,overflow属性共有三个属性值:hidden,auto,visible。咱们可使用hiddent和auto值来清除浮动,但切记不能使用visible值,若是使用这个值将没法达到清除浮动效果。
优势:简单,代码少,浏览器支持好
缺点:使用auto时内部宽高超过父级div时,会出现滚动条,使用hidden时会被隐藏
after 方法
<div class="outer"> <div class="div1">1</div> <div class="div2">2</div> <div class="div3">3</div> </div> .outer {zoom:1;} /==for IE6/7 Maxthon2==/ .outer :after {clear:both;content:’.’;display:block;width: 0;height: 0;visibility:hidden;}
其中clear:both;指清除全部浮动;content: ‘.’; display:block;对于FF/chrome/opera/IE8不能缺乏,其中content()能够取值也能够为空。visibility:hidden;的做用是容许浏览器渲染它,可是不显示出来,这样才能实现清除浮动。
因此总的来讲,推荐使用伪类的办法。
CSS Sprites就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的“background-image”,“background- repeat”,“background-position”的组合进行背景定位,background-position能够用数字能精确的定位出背景图片的位置。
优势: 当页面加载时,不是加载每一个单独图片,而是一次加载整个组合图片。这是一个了不得的改进,它大大减小了HTTP请求的次数,减轻服务器压力,同时缩短了悬停加载图片所须要的时间延迟,使效果更流畅,不会停顿。
缺点:作图像拼合的时候很麻烦
解决方案:
display:none 文本图片的隐藏:
缺陷:搜索引擎可能认为被隐藏的文字属于垃圾信息而被忽略
屏幕阅读器(是为视觉上有障碍的人设计的读取屏幕内容的程序)会忽略被隐藏的文字,同时不利于搜索引擎。
visibility: hidden:隐藏内容或图片
缺陷:隐藏的内容会占据他所应该占据物理空间
Bootstrap中的流式布局;Bootstrap提供了两种布局方式,固定式布局和流式布局(用em表示的叫作弹性布局,用百分比表示的叫作流体布局)方式,Bootstrap的布局其实是在栅格外加个容器 (Container)
所以两种布局方式的惟一区别是:
固定布局加的是固定宽度(width)的容器,
流式布局加的是自适应(或叫可变)宽度的容器。
媒体查询规则是开发者可以在相同的样式中,针对不一样的媒介来使用不一样的样式规则。在CSS2的时候有media Type的规则,经过不一样的媒介来切换不一样的CSS样式。经过媒体查询的技术能够实现响应式布局,适应不一样终端的开发。媒体查询的具体知识请见 CSS3新属性应用文档。
添加打印样式,为屏幕显示和打印分别准备一个css文件,以下所示:
用于屏幕显示的css:
<link rel="stylesheet" href="css/mainstylesheet.css" media="screen" />
用于打印的css:
<link rel="stylesheet" href="css/printstylesheet.css" media="print" />
import方式:
<style type="text/css"> @import url("css/printstylesheet.css") print; </style>
直接把屏幕显示样式和打印样式写在一个css文件中:
@media print {}{ h1 { color: black; } h2 {}{ color: gray; } }
@media print里面的内容只对打印出来的内容有效,以外的内容就是屏幕显示的样式。
建立一个不指定媒体类型的样式表一般颇有用(或者利用media=”all”)。当你准备好定义一些特别用
于打印的规则时,能够只建立一个单独的样式表,使任何在打印时看起来很差的样式都失效。使用这种方法的一个问题是必须确保打印机样式实际上确实覆盖了主样式表。可使用!important.
打印样式表也应有些注意事项:
备注: 参考: http://blog.csdn.net/pangni/a...
缺点:简单来讲CSS预处理器语言较CSS玩法变得更高级了,但同时下降了本身对最终代码的控制力。更致命的是提升了门槛,首先是上手门槛,其次是维护门槛,再来是团队总体水平和规范的门槛。这也形成了初学学习成本的昂贵。
优势:用一种专门的编程语言,为CSS增长了一些编程的特性,将CSS做为目标生成文件,而后开发者就只要使用这种语言进行编码工做。通俗的说,CSS预处理器用一种专门的编程语言,进行Web页面样式设计,而后再编译成正常的CSS文件,以供项目使用。CSS预处理器为CSS增长一些编程的特性,无需考虑浏览器的兼容性问题,例如你能够在CSS中使用变量、简单的逻辑程序、函数等等在编程语言中的一些基本特性,可让你的CSS更加简洁、适应性更强、可读性更佳,更易于代码的维护等诸多好处。
Webfonts (字体服务例如:Google Webfonts,Typekit 等等。)
浏览器先产生一个元素集合,这个集合每每由最后一个部分的索引产生(若是没有索引就是全部元素的集合)。而后向上匹配,若是不符合上一个部分,就把元素从集合中删除,直到真个选择器都匹配完,还在集合中的元素就匹配这个选择器了。
伪类用于当已有元素处于的某个状态时,为其添加对应的样式,这个状态是根据用户行为而动态变化的。
伪元素用于建立一些不在文档树中的元素,并为其添加样式。
区别:伪类的操做对象是文档树中已有的元素,而伪元素则建立了一个文档数外的元素。所以,伪类与伪元素的区别在于:有没有建立一个文档树以外的元素
参考: http://www.alloyteam.com/2016...
盒子模型分为两类:W3C标准盒子模型和IE盒子模型
这二者的关键区别就在于:
宽高的计算:W3C盒子模型——属性高(height)和属性宽(width)这两个值不包含 填充(padding)和边框(border)
IE盒子模型——属性高(height)和属性宽(width)这两个值包含 填充(padding)和边框(border)
各浏览器盒模型的组成结构是一致的,区别只是在”怪异模式”下宽度和高度的计算方式,而“标准模式”下则没有区别。
组成结构以宽度为例:总宽度=marginLeft+borderLeft+paddingLeft+contentWidth+paddingRight+borderRight+marginRight(W3C标准盒子模型)。页面在“怪异模式”下,css中为元素的width和height设置的值在标准浏览器和ie系列(ie9除外)里的表明的含义是不一样的(IE盒子模型)。
于是解决兼容型为题最简洁和值得推荐的方式是:下述的第一条。
一、hack的方式
#box { width:100px !important; // ie9,ff,chrome,opera这样的标准浏览器 width:160px; //全部的浏览器;它的本意是只对不认识!important的设置。但是ie七、ie8也认识 +width:160px!important;//ie7 width:160px/0!important;//ie8 padding:0 10px;border:20px solid blue;margin:70px; }
二、wrapper
#box { width:100px; margin:70px; float:left; } .wrapper { padding:0 10px;border:20px solid blue; }
总结:使用“标准模式”便可实现兼容,不兼容只发生在“怪异模式”下。并且正常的页面基本上都选择前者,若是选择后者,麻烦不止于此,一些css技巧也将失灵,如将div居中:div {margin:0 auto;}
设置之后,至关于以怪异模式解析,border和padding全会在你设置的宽度内部,好比手机端设置两行而且的布局,宽度各为50%,若是不用这个属性,设置border后右边的div会下来错位,设置这个属性,宽度仍是50%而不是50%+*px,两行能够并列显示
说到 IE 的 bug,在 IE6之前的版本中,IE对盒模型的解析出现一些问题,跟其它浏览器不一样,将 border 与 padding 都包含在 width 以内。而另一些浏览器则与它相反,是不包括border和padding的。对于IE浏览器,当咱们设置 box-sizing: content-box; 时,浏览器对盒模型的解释听从咱们以前认识到的 W3C 标准,当它定义width和height时,它的宽度不包括border和padding;对于非IE浏览器,当咱们设置box-sizing: border-box; 时,浏览器对盒模型的解释与 IE6以前的版本相同,当它定义width和height时,border和padding则是被包含在宽高以内的。内容的宽和高能够经过定义的“width”和 “height”减去相应方向的“padding”和“border”的宽度获得。内容的宽和高必须保证不能为负,必要时将自动增大该元素border box的尺寸以使其内容的宽或高最小为0。
好处:
display 属性规定元素应该生成的框的类型。
都是display 属性规定元素应该生成的框的类型。可是block表明块级元素,元素先后都有换行符;inline是默认的样式,表示该元素被显示为内联元素,元素先后没有换行符号。也就是说,block元素一般被现实为独立的一块,会单独换一行;inline元素则先后不会产生换行,一系列inline元素都在一行内显示,直到该行排满。而inline-block表明行内块元素(css2.0新增)。
display:block:
display:inline:
display:inline-block:
简单来讲就是将对象呈现为inline对象,可是对象的内容做为block对象呈现。以后的内联对象会被排列在同一行内。好比咱们能够给一个link(a元素)inline-block属性值,使其既具备block的宽度高度特性又具备inline的同行特性
各个属性的值:
relative和absolute进行对比分析:
relative和absolute与fixed进行对比分析:
盒子模型的三维立体结构: 第一层:border 第二层:内容+padding 第三层:背景图片 第四层:背景颜色 第五层:外边距
语义化的HTML就是写出的HTML代码,符合内容的结构化(内容语义化),选择合适的标签(代码语义化),可以便于开发者阅读和写出更优雅的代码的同时让浏览器的爬虫和机器很好地解析。
id选择器、类选择器、元素选择器、全局选择器、组合选择器、继承选择器、伪类选择器
权重计算:
第一等级:表明内联样式,如style="",权值为 1000
第二等级:表明id选择器,如#content,权值为100
第三等级:表明类,伪类和属性选择器,如.content,权值为10
第四等级:表明标签选择器和伪元素选择器,如div p,权值为1
Css 语句权重由选择器的权值相加可得。
样式优先级:!important>行内样式>内部样式>外部样式
CSS的引入方式共有三种:
连接:
<link type="text/css" rel="styleSheet" href="CSS文件路径" />
导入:
<style type="text/css"> @import url("css文件路径"); </style>
连接和道路的区别:
<link>:
@import:
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 比内联优先级高
该布局模型的目的是提供一种更加高效的方式来对容器中的条目进行布局、对齐和分配空间。在传统的布局方式中,block 布局是把块在垂直方向从上到下依次排列的;而 inline 布局则是在水平方向来排列。弹性盒布局并无这样内在的方向限制,能够由开发人员自由操做。
适用场景:弹性布局适合于移动前端开发,在Android和ios上也完美支持。
首先,须要把元素的宽度、高度设为0。而后设置边框样式。
width: 0; height: 0; border-top: 40px solid transparent; border-left: 40px solid transparent; border-right: 40px solid transparent; border-bottom: 40px solid #ff0000;
第一种真正的品字:
三块高宽是肯定的;
上面那块用margin: 0 auto;居中;
下面两块用float或者inline-block不换行;
用margin调整位置使他们居中。
第二种全屏的品字布局:
上面的div设置成100%,下面的div分别宽50%,而后使用float或者inline使其不换行。
{ background-color:#f1ee18;/*全部识别*/ .background-color:#00deff\9; /*IE六、七、8识别*/ +background-color:#a200ff;/*IE六、7识别*/ _background-color:#1e0bd1;/*IE6识别*/ }
由于浏览器的兼容问题,不一样浏览器对有些标签的默认值是不一样的,若是没对CSS初始化每每会出现浏览器之间的页面显示差别。
不管属于哪一种,都要先找到其祖先元素中最近的 position 值不为 static 的元素,而后再判断:
若是都找不到,则为 initial containing block。
补充:
当一个元素的visibility属性被设置成collapse值后,对于通常的元素,它的表现跟hidden是同样的。
display属性规定元素应该生成的框的类型;position属性规定元素的定位类型;float属性是一种布局方式,定义元素在哪一个方向浮动。
相似于优先级机制:position:absolute/fixed优先级最高,有他们在时,float不起做用,display值须要调整。float 或者absolute定位的元素,只能是块元素或表格。
BFC规定了内部的Block Box如何布局。
定位方案:
知足下列条件之一就可触发BFC:
浮动元素碰到包含它的边框或者浮动元素的边框停留。因为浮动元素不在文档流中,因此文档流的块框表现得就像浮动框不存在同样。浮动元素会漂浮在文档流的块框上。
浮动带来的问题:
清除浮动的方式:
在重合元素外包裹一层容器,并触发该容器生成一个BFC。
例子:
<div class="aside"></div> <div class="text"> <div class="main"></div> </div> <!--下面是css代码--> .aside { margin-bottom: 100px; width: 100px; height: 150px; background: #f66; } .main { margin-top: 100px; height: 200px; background: #fcc; } .text{ /*盒子main的外面包一个div,经过改变此div的属性使两个盒子分属于两个不一样的BFC,以此来阻止margin重叠*/ overflow: hidden; //此时已经触发了BFC属性。 }
自动变成display:block
经过媒体查询能够为不一样大小和尺寸的媒体定义不一样的css,适应相应的设备的显示。
CSS选择器的解析是从右向左解析的。若从左向右的匹配,发现不符合规则,须要进行回溯,会损失不少性能。若从右向左匹配,先找到全部的最右节点,对于每个节点,向上寻找其父节点直到找到根元素或知足条件的匹配规则,则结束这个分支的遍历。两种匹配规则的性能差异很大,是由于从右向左的匹配在第一步就筛选掉了大量的不符合条件的最右节点(叶子节点),而从左向右的匹配规则的性能都浪费在了失败的查找上面。
而在 CSS 解析完毕后,须要将解析的结果与 DOM Tree 的内容一块儿进行分析创建一棵 Render Tree,最终用来进行绘图。在创建 Render Tree 时(WebKit 中的「Attachment」过程),浏览器就要为每一个 DOM Tree 中的元素根据 CSS 的解析结果(Style Rules)来肯定生成怎样的 Render Tree。
使用偶数字体。偶数字号相对更容易和 web 设计的其余部分构成比例关系。Windows 自带的点阵宋体(中易宋体)从 Vista 开始只提供 十二、1四、16 px 这三个大小的点阵,而 1三、1五、17 px时用的是小一号的点。(即每一个字占的空间大了 1 px,但点阵没变),因而略显稀疏。
什么时候使用margin:
什么时候使用padding:
兼容性的问题:在IE5 IE6中,为float的盒子指定margin时,左侧的margin可能会变成两倍的宽度。经过改变padding或者指定盒子的display:inline解决。
当按百分比设定一个元素的宽度时,它是相对于父容器的宽度计算的,可是,对于一些表示竖向距离的属性,例如 padding-top , padding-bottom , margin-top , margin-bottom 等,当按百分比设定它们时,依据的也是父容器的宽度,而不是高度。
原理:有点相似于轮播,总体的元素一直排列下去,假设有5个须要展现的全屏页面,那么高度是500%,只是展现100%,剩下的能够经过transform进行y轴定位,也能够经过margin-top实现
overflow:hidden;transition:all 1000ms ease;
响应式网站设计(Responsive Web design)是一个网站可以兼容多个终端,而不是为每个终端作一个特定的版本。
基本原理是经过媒体查询检测不一样的设备屏幕尺寸作处理。
页面头部必须有meta声明的viewport。
<meta name="’viewport’" content="”width=device-width," initial-scale="1." maximum-scale="1,user-scalable=no”"/>
视差滚动(Parallax Scrolling)经过在网页向下滚动的时候,控制背景的移动速度比前景的移动速度慢来建立出使人惊叹的3D效果。
:before 和 :after 这两个伪元素,是在CSS2.1里新出现的。起初,伪元素的前缀使用的是单冒号语法,但随着Web的进化,在CSS3的规范里,伪元素的语法被修改为使用双冒号,成为::before ::after
行高是指一行文字的高度,具体说是两行文字间基线的距离。CSS中起高度做用的是height和line-height,没有定义height属性,最终其表现做用必定是line-height。
单行文本垂直居中:把line-height值设置为height同样大小的值能够实现单行文字的垂直居中,其实也能够把height删除。
多行文本垂直居中:须要设置display属性为inline-block。
p{font-size:10px;-webkit-transform:scale(0.8);} //0.8是缩放比例
-webkit-font-smoothing在window系统下没有起做用,可是在IOS设备上起做用-webkit-font-smoothing:antialiased是最佳的,灰度平滑。
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"/>
多数显示器默认频率是60Hz,即1秒刷新60次,因此理论上最小间隔为1/60*1000ms = 16.7ms
行框的排列会受到中间空白(回车空格)等的影响,由于空格也属于字符,这些空白也会被应用样式,占据空间,因此会有间隔,把字符大小设为0,就没有空格了。
解决方法:
外层div使用position:relative;高度要求自适应的div使用position: absolute; top: 100px; bottom: 0; left: 0
页面加载自上而下 固然是先加载样式。
写在body标签后因为浏览器以逐行方式对HTML文档进行解析,当解析到写在尾部的样式表(外联或写在style标签)会致使浏览器中止以前的渲染,等待加载且解析样式表完成以后从新渲染,在windows的IE下可能会出现FOUC现象(即样式失效致使的页面闪烁问题)
将一个页面涉及到的全部图片都包含到一张大图中去,而后利用CSS的 background-image,background- repeat,background-position 的组合进行背景定位。利用CSS Sprites能很好地减小网页的http请求,从而大大的提升页面的性能;CSS Sprites能减小图片的字节。