浮动会漂浮于普通流之上,像浮云同样,可是只能左右浮动。正是这种特性,致使框内部因为不存在其余普通流元素了,表现出高度为0(高度塌陷)。php
a. 添加额外标签,例如<div ></div>css
b. 使用br标签和其自身的html属性,例如<br clear="all" />html
c. 父元素设置 overflow:hidden;在IE6中还须要触发hasLayout,例如zoom:1;git
d. 父元素设置 overflow:auto 属性;一样IE6须要触发hasLayoutgithub
e. 父元素也设置浮动api
f. 父元素设置display:table浏览器
g. 使用:after 伪元素;因为IE6-7不支持:after,使用 zoom:1触发 hasLayout。ide
在CSS2.1里面有一个很重要的概念,那就是 Block formatting contexts (块级格式化上下文),简称 BFC。工具
建立了BFC的元素就是一个独立的盒子,里面的子元素不会在布局上影响外面的元素,同时BFC仍然属于文档中的普通流。布局
IE6-7的显示引擎使用的是一个称为布局(layout)的内部概念。
参考《那些年咱们一块儿清除过的浮动》
a. visibility: hidden;这个属性只是简单的隐藏某个元素,可是元素占用的空间任然存在。
b. opacity: 0;一个CSS3属性,设置0可使一个元素彻底透明,制做出和visibility同样的效果。与visibility相比,它能够被transition和animate
c. position: absolute;使元素脱离文档流,处于普通文档之上,给它设置一个很大的left负值定位,使元素定位在可见区域以外。
d. display: none;元素会变得不可见,而且不会再占用文档的空间。
e. transform: scale(0);将一个元素设置为无限小,这个元素将不可见。这个元素原来所在的位置将被保留。
f. HTML5 hidden attribute;hidden属性的效果和display:none;相同,这个属性用于记录一个元素的状态
g. height: 0; overflow: hidden;将元素在垂直方向上收缩为0,使元素消失。只要元素没有可见的边框,该技术就能够正常工做。
h. filter: blur(0);将一个元素的模糊度设置为0,从而使这个元素“消失”在页面中。
参考《使用CSS隐藏HTML元素的4种经常使用方法》《经过HTML和CSS隐藏和显示元素的4种方法》
none| capitalize(将每一个单词的第一个字母转换成大写) | uppercase(将每一个单词转换成大写 ) | lowercase(将每一个单词转换成小写 )
CSS样式表继承指的是,特定的CSS属性向下传递到子孙元素。会被继承下去的属性以下:参考《CSS样式表继承详解》
文本相关:font-family,font-size, font-style,font-variant,font-weight, font,letter-spacing,line-height,color
列表相关:list-style-image,list-style-position,list-style-type, list-style
元素选择器:* 、E、 E#id、 E.class
关系选择器:E、F、E>F、E+F、E~F
属性选择器:E[att]、E[att="val"]、E[att~="val"]、E[att^="val"]、E[att$="val"]、E[att*="val"]、E[att|="val"]
伪类选择器:E:link、E:visited、E:hover、E:active、E:focus、E:lang(fr)、E:not(s)、E:root、E:first-child、E:last-chil等
伪对象选择器:E:first-letter/E::first-letter、E:first-line/E::first-line、E:before/E::before、E:after/E::after、E::selection
参考《选择符列表》
CSS 引入伪类和伪元素的概念是为了描述一些现有CSS没法描述的东西
根本区别在于:它们是否创造了新的元素(抽象)
伪类:一开始用来表示一些元素的动态状态,随后CSS2标准扩展了其概念范围,使其成为了全部逻辑上存在但在文档树中却无须标识的“幽灵”分类
伪对象:表明了某个元素的子元素,这个子元素虽然在逻辑上存在,但却并不实际存在于文档树中
一个行内样式+1000,一个id+100,一个属性选择器/class类/伪类选择器+10,一个元素名/伪对象选择器+1。
关系选择器将拆分为两个选择器再计算。参考《CSS权重》
a. 假等高列:使用背景图片,在列的父元素上使用这个背景图进行Y轴的铺放,从而实现一种等高列的假像
b. 给容器div使用单独的背景色(固定布局)(流体布局):用<div>元素中的最大高度撑大其余的<div>容器高度
c. 建立带边框的两列等高布局:用border-left来作,只能使用两列。
d. 使用正padding和负margin对冲实现多列布局方法:在全部列中使用正的上、下padding和负的上、下margin,并在全部列外面加上一个容器,设置overflow:hiden把溢出背景切掉
e. 使用边框和定位模拟列等高:但不能使用在多列
f. 模仿表格布局等高列效果:兼容性很差,在ie6-7没法正常运行
px是相对长度单位,相对于显示器屏幕分辨率而言的。
em是相对长度单位,相对于当前对象内文本的字体尺寸。
px定义的字体,没法用浏览器字体放大功能。
em的值并非固定的,会继承父级元素的字体大小,1 ÷ 父元素的font-size × 须要转换的像素值 = em值。
a. link属于HTML标签,而@import是CSS提供的,且只能加载 CSS
b. 页面被加载时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载
c. import只在IE5以上才能识别,而link是HTML标签,无兼容问题
d. link方式的样式的权重 高于@import的权重
e. 当使用 Javascript 控制 DOM 去改变样式的时候,只能使用 link 方式,由于 @import 眼里只有 CSS ,不是 DOM 能够控制
相同:
a. 改变行内元素的呈现方式,display被置为block
b. 让元素脱离普通流,不占据空间
c. 默认会覆盖到非定位元素上
区别:
absolute的”根元素“是能够设置的,而fixed的”根元素“固定为浏览器窗口。
当你滚动网页,fixed元素与浏览器窗口之间的距离是不变的。
absolute:生成绝对定位的元素,相对于 static 定位之外的第一个祖先元素进行定位
fixed:生成绝对定位的元素,相对于浏览器窗口进行定位。 (IE6不支持)
relative:生成相对定位的元素,相对于其在普通流中的位置进行定位
static:默认值。没有定位,元素出如今正常的流中
CSS3实现圆角(border-radius),阴影(box-shadow),对文字加特效(text-shadow),线性渐变(gradient),变形(transform)
增长了更多的CSS选择器 多背景 rgba,在CSS3中惟一引入的伪元素是::selection,媒体查询,多栏布局
参考《CSS3中的动画效果记录》、《CSS3中border-radius、box-shadow与gradient那点事儿》
由于浏览器的兼容问题,不一样浏览器对有些标签的默认值是不一样的,若是没对CSS初始化每每会出现浏览器之间的页面显示差别。
固然,初始化样式会对SEO有必定的影响,但鱼和熊掌不可兼得,但力求影响最小的状况下初始化。
CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中,
再利用CSS的“background-image”,“background- repeat”,“background-position”的组合进行背景定位,
background-position能够用数字精确的定位出背景图片的位置。
优势:
a. 减小网页的http请求
b. 减小图片的字节
c. 解决了网页设计师在图片命名上的困扰,只需对一张集合的图片上命名就能够了,不须要对每个小元素进行命名
d. 更换风格方便,只须要在一张或少张图片上修改图片的颜色或样式,整个网页的风格就能够改变。
缺点:
a. 在宽屏,高分辨率的屏幕下的自适应页面,你的图片若是不够宽,很容易出现背景断裂
b. CSS Sprites在开发的时候,要经过photoshop或其余工具测量计算每个背景单元的精确位置
c. 在维护的时候比较麻烦,若是页面背景有少量改动,通常就要改这张合并的图片
a. 浮动元素脱离文档流,不占据空间(引发“高度塌陷”现象)
b. 浮动元素碰到包含它的边框或者浮动元素的边框停留。
a. 父元素的高度没法被撑开,影响与父元素同级的元素
b. 与浮动元素同级的非浮动元素会跟随其后
c. 若非第一个元素浮动,则该元素以前的元素也须要浮动,不然会影响页面显示的结构
若是使用import方法对CSS进行导入,会致使某些页面在Windows下的IE出现一些奇怪的现象:
以无样式显示页面内容的瞬间闪烁,这种现象称之为文档样式短暂失效(Flash of Unstyled Content),简称为FOUC。
原理:当样式表晚于结构性html加载,当加载到此样式表时,页面将中止以前的渲染。此样式表被下载和解析后,将从新渲染页面,也就出现了短暂的花屏现象。
解决方法:使用LINK标签将样式表放在文档HEAD中。
带单位:px不用计算,em则会使元素以其父元素font-size值为参考来计算本身的行高
纯数字:把比例传递给后代,例如父级行高为1.5,子元素字体为18px,则子元素行高为1.5*18=27px
百分比:将计算后的值传递给后代
参考《line-height的理解》、《浅析line-height和vertical》,查看在线源码。
L-V-H-A,l(link)ov(visited)e h(hover)a(active)te,即用喜欢和讨厌两个词来归纳
a. 浏览器默认的margin和padding不一样
b. IE6双边距bug
c. 在ie6,ie7中元素高度超出本身设置高度。缘由是IE8之前的浏览器中会给元素设置默认的行高的高度致使的
d. min-height在IE6下不起做用
e. 透明性IE用filter:Alpha(Opacity=60),而其余主流浏览器用 opacity:0.6
f. input边框问题,去掉input边框通常用border:none;就能够,但因为IE6在解析input样式时的BUG(优先级问题),在IE6下无效
a. 外部样式表:经过<link>标签引入一个外部css文件
b. 内部样式表:将css代码放在 <style> 标签内部
c. 内联样式:将css样式直接定义在 HTML 元素内部
外边距重叠就是margin-collapse。
在CSS当中,相邻的两个盒子(多是兄弟关系也多是祖先关系)的外边距能够结合成一个单独的外边距。这种合并外边距的方式被称为折叠,而且于是所结合成的外边距称为折叠外边距。
折叠结果遵循下列计算规则:
a. 两个相邻的外边距都是正数时,折叠结果是它们二者之间较大的值。
b. 两个相邻的外边距都是负数时,折叠结果是二者绝对值的较大值。
c. 两个外边距一正一负时,折叠结果是二者的相加的和。
a. opacity做用于元素,以及元素内的全部内容的透明度,rgba()只做用于元素的颜色或其背景色。
b. 设置rgba透明的元素的子元素不会继承透明效果!
css的content属性专门应用在 before/after 伪元素上,用于来插入生成内容。
能够配合自定义字体显示特殊符号。