CSS基础
- CSS全称是Cascading Style Sheets,层叠样式表
引用CSS
内联样式
|
|
内部样式
|
|
外部样式
第一种方式
|
|
第二种方式
|
|
浏览器F12
- 查看浏览器默认样式
- 查看设置样式
- 查看html结构
CSS书写规范
>>CSS书写规范
CSS选择器
link和@import
- 这两种方式都是为了加载CSS文件
- link属于XHTML标签,而@import完全是CSS提供的一种方式;link除了加载CSS还可以定义RSS,定义rel链接属性等等,@import只能加载CSS
- 加载顺序的差别;link引用的CSS会同时被加载,@import引用的CSS会等到页面全部被下载再被加载
- 兼容性的差别;@import只有IE5以上才能识别,link浏览器都能识别
- 使用dom控制样式的差别;当使用js控制dom去改变样式的时候,只能通过link标签,@import不是dom可以控制的
- 推荐link
class和id选择器的使用场景
- class名称可以重复,一般用于给多个元素赋予同样的样式;增加一个同名的class类就可以添加同样的样式,简化代码
- id名称是唯一的,一般用于划分大的区块
CSS常见选择器
- 基础选择器
- 组合选择器
- 属性选择器
- 伪类选择器
- 伪元素选择器
基础选择器
| 选择器 | 名称/含义 |
|---|---|
| * | 通用选择器,匹配页面任何元素 |
| #id | id选择器,匹配特定id的元素 |
| .class | 类选择器,匹配class特定类的元素 |
| element | 标签选择器 |
|
|
组合选择器
| 选择器 | 名称/含义 |
|---|---|
| E,F | 多元素选择器,用,分隔,同时匹配元素E或元素F |
| E F | 后代选择器,用空格分隔,匹配E元素所有的后代元素F(不只是子元素、子元素向下递归) |
| E>F | 子元素选择器,用>分隔,匹配E元素所有直接子元素 |
| E+F | 直接相邻选择器,匹配E元素之后的相邻的同级元素F |
| E~F | 普通相邻选择器,匹配E元素之后的同级元素F(无论直接相邻与否) |
| .class1.class2 | id和class选择器和选择器连写的时候中间没有分隔符,.和#本身充当分隔符的元素 |
| .element#id | id和class选择器和选择器连写的时候中间没有分隔符,.和#本身充当分隔符的元素 |
|
|
属性选择器
| 选择器 | 名称/含义 |
|---|---|
| E[attr] | 匹配所有具有属性attr的元素,div[id]就能取到所有有id属性的div |
| E[attr = value] | 匹配属性attr值为value的元素,div[id=test],匹配id=test的div |
| E[attr ~= value] | 匹配所有属性attr具有多个空格分隔、其中一个值等于value的元素 |
| E[attr \= value] | 匹配所有属性attr为value或是以value-为前缀开头的元素 |
| E[attr ^= value] | 匹配属性attr的值以value开头的元素 |
| E[attr $= value] | 匹配属性attr的值以value结尾的元素 |
| E[attr *= value] | 匹配属性attr的值包含value的元素 |
|
|
伪类选择器
- 状态是动态变化,当一个元素达到一个特定状态的时候,它得到一个伪类的样式,它是基于文档之外的抽象,不会改变DOM的内容,只是插入一些修饰类的元素,对用户可见,对DOM不可见
| 选择器 | 名称/含义 |
|---|---|
| E:first-child | 匹配元素E的第一个子元素 |
| E:link | 匹配所有未被点击的链接 |
| E:visited | 匹配所有已被点击的链接 |
| E:active | 匹配鼠标已经其上按下、还没有释放的E元素 |
| E:hover | 匹配鼠标悬停其上的E元素 |
| E:focus | 匹配获得当前焦点的E元素 |
| E:lang(c) | 匹配lang属性等于c的E元素 |
| E:enabled | 匹配表单中可用的元素 |
| E:disabled | 匹配表单中禁用的元素 |
| E:checked | 匹配表单中被选中的radio或checkbox元素 |
| E::selection | 匹配用户当前选中的元素 |
| E:root | 匹配文档的根元素,对于HTML文档,就是HTML元素 |
| E:nth-child(n) | 匹配其父元素的第n个子元素,第一个编号为1 |
| E:nth-last-child(n) | 匹配其父元素的倒数第n个子元素,第一个编号为1 |
| E:nth-of-type(n) | 与:nth-child()作用类似,但是仅匹配使用同种标签的元素 |
| E:nth-last-of-type(n) | 与:nth-last-child() 作用类似,但是仅匹配使用同种标签的元素 |
| E:last-child | 匹配父元素的最后一个子元素,等同于:nth-last-child(1) |
| E:first-of-type | 匹配父元素下使用同种标签的第一个子元素,等同于:nth-of-type(1) |
| E:last-of-type | 匹配父元素下使用同种标签的最后一个子元素,等同于:nth-last-of-type(1) |
| E:only-child | 匹配父元素下仅有的一个子元素,等同于:first-child:last-child或 :nth-child(1):nth-last-child(1) |
| E:only-of-type | 匹配父元素下使用同种标签的唯一一个子元素,等同于:first-of-type:last-of-type或 :nth-of-type(1):nth-last-of-type(1) |
| E:empty | 匹配一个不包含任何子元素的元素,文本节点也被看作子元素 |
| E:not(selector) | 匹配不符合当前选择器的任何元素 |
- n的取值
- 1,2,3,4,5
- 2n+1, 2n, 4n-1
- odd, even
|
|
|
|
|
|
|
|
伪元素选择器
- 伪元素用于向某些选择器设置特殊效果,如果需要加新元素加以标识就选择伪元素
| 选择器 | 含义 |
|---|---|
| E::first-line | 匹配E元素内容的第一行 |
| E::first-letter | 匹配E元素内容的第一个字母 |
| E::before | 在E元素之前插入生成的内容 |
| E::after | 在E元素之后插入生成的内容 |
|
|
选择器的优先级
优先级从高到低依次为
- 在属性后面使用!important,会覆盖页面内任何位置定义的元素样式
- 作为style属性写在元素标签上的内联样式
- id选择器
- 类选择器
- 伪类选择器
- 属性选择器
- 标签选择器
- 通配符选择器
- 浏览器自定义
- 定位的越精准,优先级就越高,优先级高的样式会覆盖优先级低的
a:link,a:visited,a:hover,a:active的顺序
- 未点击(link)
- 点击完发生链接之后(visited)
- 鼠标放上去悬浮着(hover)
- 鼠标点下去不松开(active)
- 记住lvha,如果顺序写错了,则不会有效果
CSS选择器的命名空间
- 使用语义化的命名可以使代码容易读懂
- 便于维护和多人协作
- 浏览器可能会因为不规范的命名产生不同的样式
列出你知道的伪类选择器
- E:first-child | E:link | E:visited |E:active |E:hover |E:focus |E:lang(c) |E:enabled |E:disabled |E:checked |E::selection |E:root |E:nth-child(n) |E:nth-last-child(n) |E:nth-of-type(n) |E:nth-last-of-type(n) |E:last-child |E:first-of-type |E:last-of-type |E:only-child |E:only-of-type |E:empty |E:not(selector) |
:first-child和:first-of-type的作用和区别
- E:first-child首选是E的父元素中的第一个子元素,在这些子元素中选中E标签;E:first-of-type首选是E的父元素的第一个同类型的(E)标签
|
|
code:以下选择器分别是什么意思?
|
|
explain
|
|
code:运行如下代码,解析下输出样式的原因
explain
|
|
原因
- 蓝色背景:样式里面设置了first-of-type,也就是第一个类型的元素将应用为蓝色背景,而第一个类型就是p和h3,h3有2个,取第一个
- 红色字:first-child是指后代中第一个子元素,第一个子元素是p,所以只是p应用了红色字
CSS常见样式
块级元素和行内元素
| 块级元素(block-level) | 行内元素(inline-level) |
|---|---|
| div | em |
| h1~h6 | strong |
| p | script |
| hr | span |
| form | a |
| ul | br |
| dl | img |
| ol | button |
| pre | input |
| table | label |
| li | select |
| dd | textarea |
| dt | code |
| tr | |
| td | |
| th |
区别
| 块级元素 | 行内元素 |
|---|---|
| 总是在新行上开始 | 和其他行内元素都在一行上 |
| 可以包含块级元素和行内元素 | 只能包含行内元素和文本 |
| 可以设置宽高,宽度默认是它的父容器的100%,除非设定一个宽度 | 不可设置宽高,默认宽高是自身内容 |
| margin、padding上下左右都生效 | margin、padding上下无效,左右有效 |
|
|
|
|
|
|
|
|
CSS继承
- 后代元素继承祖先元素的属性样式
默认继承属性
- font-family:规定元素的字体系列
- font-weight:设置字体的粗细
- font-size:设置字体的尺寸
- font-style:定义字体的风格
- text-indent:文本缩进
- text-align:文本水平对齐
- line-height:行高
- word-spacing:增加或减少单词间的空白(即字间隔)
- letter-spacing:增加或减少字符间的空白(字符间距)
- text-transform:控制文本大小写
- direction:规定文本的书写方向
- color:文本颜色
- list-style: 列表样式
默认不继承属性
- display:规定元素应该生成的框的类型
- vertical-align:垂直文本对齐
- text-decoration:规定添加到文本的装饰
- text-shadow:文本阴影效果
- white-space:空白符的处理
- 盒模型属性:width、height、margin 、margin-top、margin-right、margin-bottom、margin-left、border、border-style、border-top-style、border-right-style、border-bottom-style、border-left-style、border-width、border-top-width、border-right-right、border-bottom-width、border-left-width、border-color、border-top-color、border-right-color、border-bottom-color、border-left-color、border-top、border-right、border-bottom、border-left、padding、padding-top、padding-right、padding-bottom、padding-left
- 背景属性:background、background-color、background-image、background-repeat、background-position、background-attachment
- 定位属性:float、clear、position、top、right、bottom、left、min-width、min-height、max-width、max-height、overflow、clip、z-index
块级元素、行内元素水平居中
块级元素水平居中
- 设置margin:0 auto
|
|
块级元素内的文本图片等行内元素水平居中
- text-aglin:center
|
|
用 CSS 实现一个三角形
- 用CSS的border属性,可以实现三角形
|
|
单行文本溢出加…的效果实现
- 如果对HTML的块级元素设置了宽度,那么当文本太长放不下的时候,它会自动换行,如果我们不想让它换行,我们可以用一下三段代码实现:white-space: nowrap;overflow: hidden;text-overflow: ellipsis;
|
|
px, em, rem 有什么区别
- px:固定像素
- em:相对单位,相对于父元素字体大小
- rem:相对单位,相对于根元素(html)字体大小
|
|
code:解释下面代码的作用?为什么要加引号?字体里\5b8b\4f53代表什么?
|
|
explain
- 给body添加字体大小为12px,行高是字体的1.5倍,顺序查找本地电脑字体库,如果没有则使用默认的字体
- 引号是因为英文字体中有空格,浏览器容易解析成好几个字体,避免出错
- \5b8b\4f53达标黑字体的unicode编码
code:实现如下效果
explain
|
|
code:完成如下gif效果图
explain
|
|
code:完成如下列表
explain
|
|
code:完成如下效果图
explain
|
|
IE盒模型和W3C盒模型
- 盒模型是由margin、border、padding、content组成
IE盒模型
- ie678怪异模式(不添加doctype)使用ie盒模型
- 它的width实际上是content+padding+border,如图所示
W3C盒模型
- chrome,ie9,ie678(添加doctype)使用W3C盒模型
- 它的width实际上只是content,如图所示
优缺点
- W3C标准盒模型对content内容宽高设置更加方便,但是当需要设置整个盒子的border宽度时候需要计算
- IE盒模型对整个盒子的border宽高设置更加方便,但是对content内容设置就需要计算
- 当你设置一个元素为 box-sizing: border-box; 时,此元素的内边距和边框不再会增加它的宽度
自定义盒模型类型
- box-sizing: content-box:w3c标准盒模型
- box-sizing: border-box:“IE盒模型”
|
|
line-height:2和line-height:200%
- 都表示行高为字体大小的2倍
区别
- 当设置在父容器中就有区别
line-height:2
- 写在父容器中,子元素的行高都是自身字体的大小的2倍,是相对大小
- 子元素的字体大小不同,行高也会不同
line-height:200%
- 写在父容器中,浏览器根据父容器字体大小先计算出行高的值,然后子元素继承这个行高值,是固定大小
- 子元素的字体大小不同,行高都是固定某个值
|
|
inline-block
特性
- 既有inline的特征,不占据一整行,宽度由内容撑开,多个元素可以并排
- 又有block的特征,可以设置width、height、margin、border、padding等盒模型的参数
|
|
去除缝隙
- 由于HTML代码中两个span中间有一些空格和回车,浏览器将它们解读为一个空白字符(空白折叠现象)
- 去除方法如下
|
|
|
|
对齐方式
- 当inline-block的高度不一样的时候,需要设置对齐方式
- 顶端对齐:vertical-align:top
- 中部对齐:vertical-align:middle
- 底部对齐:vertical-align:bottom
|
|
CSS sprite(精灵图)
- 将网页中涉及到的零星图片包含到一张大图中去
- 不再是每个图片都要发送http请求,提高网页加载性能
>>自动合成sprite
元素隐藏
opacity: 0;
- 将元素(后代元素会继承)的透明度设为0,即完全透明看不见,但它仍然占据空间,别的元素能感知到它的存在。也就是看不见但摸得到
visibility: hidden;
- 效果和 opacity: 0; 类似,都是从视觉上隐藏了元素,但是能“摸得到”
display: none;
- 让元素消失,不占据空间,其他元素察觉不到该元素,也就是“看不到也摸不到”
background-color: rgba(0, 0, 0, 0.2);
- 只是背景色透明(后代元素不会继承)
|
|
code:使用CSS sprite实现如下gif效果
explain
|
|
code:使用字体图标实现如下效果图
explain
|
|
- iconfont.css
|
|
CSS浮动、定位
CSS浮动元素
浮动的特征
- 浮动元素脱离文档流,根据设置的float的属性值而向左或向右移动,直到它的border外边距撞到父容器的内边缘为止
- 任何元素都可以浮动,行内元素浮动后可以设置宽高和内外边距等等块级元素的特征(默认是不能设置的)
- 不管块级元素或者行内元素,浮动之后的宽高都是由内容撑起来的(默认块级元素宽是撑满父亲,行内元素是由内容撑起来)
|
|
浮动元素对其他元素的影响
对父容器
- 如果父容器是普通元素,由于浮动元素脱离了文档流,父容器察觉不到子元素的存在,所以父容器的高度就不能被撑开,高度为0,无法包裹住浮动元素
|
|
- 按正常流,子元素撑开父容器,所以父容器的背景颜色应该是蓝色,这里没有看到,说明上面的结论
对其他浮动元素
- 其他浮动元素能察觉到浮动元素,左右移动的时候,撞到上一个浮动元素的边缘就会停止浮动,如果在本行装不下,后面的浮动元素就会往下移动,直到装下
|
|
- 如果前面的浮动元素高度不同,后面的就会在视觉上呈现被卡住的状态
|
|
对普通元素
- 普通元素无法察觉到浮动元素,该在哪还是哪,只是在视觉上会被浮动元素遮挡住
|
|
- 当第一个元素浮动的时候,第二个元素会当第一个元素不存在,占用它的位置,父容器这时候的高度是由于第一个元素撑开的,所以背景样式蓝色
文本
- 文本可以察觉到浮动元素,会给浮动元素让出位置,在视觉上呈现环绕的效果
|
|
清除浮动
- 解决浮动元素对父容器和普通元素的影响
浮动元素的影响
- 对父容器清除浮动:父容器无法察觉到浮动元素,所以高度无法被撑开,没有包裹住浮动的子元素,清除浮动就是为了让父容器撑开高度,包裹住浮动元素
- 对普通元素清除浮动:普通元素无法察觉到浮动元素,所以普通元素该在哪还是在哪,但是视觉上会被浮动元素遮挡,清除浮动就是为了让普通元素“感知到”浮动元素,从而自身往下移动,不被遮挡
清除浮动的方法
- 加一个div 设置它的 class 为 clear: both; 这条主要应用在撑开父容器高度
|
|
- 对父容器加一个伪元素,这条的本质和上一条是一样的,即在父容器的最后加一个不允许左右有浮动的块级元素,这个块级元素会移动到浮动元素的下面,而且这个块级元素能被父容器察觉到,从而父容器就被撑开了
|
|
- 对普通元素的 class 加一条clear: both; 这条主要应用在让普通元素往下移动不被浮动元素遮挡
|
|
- 利用BFC(Block Format Content)来清除浮动,有三个特性:1、BFC会阻止垂直外边距(margin-top、margin-bottom)折叠;2、BFC不会重叠浮动元素;3、BFC可以包含浮动;我们可以利用BFC的第三条特性来“清浮动”,这里其实说清浮动已经不再合适,应该说包含浮动。也就是说只要父容器形成BFC就可以
- BFC形成的方法:display:table-cell|table-caption|inline-block;overflow:hidden|auto|scroll;position:absolute|fixed;float:left|right;
|
|
CSS定位
- static
- relative
- absolute
- fixed
static(默认定位)
- 正常的普通流布局
- 一般省略
|
|
relative(相对定位)
- 相对于元素本来的位置定位,参照点是自身原来的位置,移动后视觉位置发生改变,但是它在文档流中的位置不变,对其他元素不产生影响
- 主要用于微调自己的位置,为子元素的绝对定位提供参考点
|
|
absolute(绝对定位)
- 相对于最近的那个已经定位的祖先元素定位(非static定位),如果找不到,就以根元素html(视窗)定位
- 主要应用:希望以其他元素作为参考点来定位时候
|
|
|
|
fixed(固定定位)
- 以视窗为参考点的定位,当页面上下拉动的时候,fixed定位的元素就视窗上不动
- 主要应用场景:希望元素一直展现在视窗上不移动
|
|
z-index
- 设置元素的堆叠顺序的属性,拥有更高堆叠顺序的元素总是处于堆叠顺序较低的元素的前面
- z-index仅在定位元素上奏效
- z-index越高,元素位置越靠上
|
|
position:relative和负margin
- position:relative和负margin都可以使元素位置发生变化,但是它们二者是有区别的
position:relative
- 只是视觉上元素位置发生了变化,而元素在文档流中的位置并有改变,对其他元素没有影响
|
|
负margin
- 当margin-top、margin-left为负值的时候,会把元素上移、左移,同时文档流中的位置也发生相应变化,这点与position:relative的元素设置top、left后元素还占据原来位置不同
- 当margin-bottom、margin-right设为负值的时候,元素本身没有位置变化,后面的元素会上移、左移
|
|
BFC
BFC的定义
- BFC(Block Format Content)块级格式上下文,BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素
BFC的生成
|
|
BFC的作用
清除浮动
- 父元素生成BFC可以感知到浮动的子元素,撑开高度(前面BFC已举例)
- 普通元素生成BFC可以感知到浮动元素,移动位置不被遮挡,可以根据BFC这个作用来实现两栏布局
|
|
解决margin合并问题
- 处于同一个BFC中的相邻元素,它们的 margin 会合并,如果我们不想让 margin 合并,可以给这两个元素设置不同的BFC
垂直margin合并
- 两个相邻元素如果处于同一个BFC中,那么它们就会发生垂直margin合并
合并的情况
- 当一个元素出现在另一个元素上面时,第一个元素的下外边距与第二个元素的上外边距会发生合并
- 当一个元素包含在另一个元素中时(假设没有内边距或边框把外边距分隔开),它们的上和/或下外边距也会发生合并
- 假设有一个空元素,它有外边距,但是没有边框或填充。在这种情况下,上外边距与下外边距就碰到了一起,它们会发生合并
- 如果这个外边距遇到另一个元素的外边距,它还会发生合并
合并方式
- 取较大的那个margin值
|
|
|
|
|
|
|
|
取消外边距合并的方法
- 将父子元素设置成不同的BFC,常用的是设置display: inline-block
|
|
- 不让两个外边距直接相邻,中间可以加入border,padding隔开
|
|
code:完成如下alert效果
explain
|
|
code:完成如下表单效果
explain
- html
|
|
code:完成如下模态框效果图
explain
|
|
code:完成如下导航栏gif效果
explain
|
|
CSS布局
单列布局
- 最常见布局,头部内容底部构成
如何实现
- 定宽:width:1000px;或max-width:1000px(宽度分为width、min-width、max-width,一般情况下都会用到width,但是如果你有设置min-width和max-width,width超出max-width的之后,就会用到max-width,同理,width小于min-width的话就会用到min-width)
- 水平居中:margin-left: auto; margin-right: auto;
范例
- 单列布局(无通栏)
|
|
- 单列布局(有通栏)
|
|
双列布局
- 一列固定宽度,另外一列自适应宽度
如何实现
- 浮动元素 + 普通元素margin
范例
- 侧边栏在左,固定宽度,主内容在右边自适应宽度,页面元素渲染顺序正常
|
|
- 侧边栏在右,固定宽度,主内容在左边自适应宽度,原理一样,只是页面元素渲染顺序不同
|
|
三列布局
- 两侧两列固定宽度,中间列自适应宽度
- 这个是常见的三列布局,主要内容在dom最后
|
|
圣杯布局
- 是三列布局,两边固定宽度,中间自适应
- 中间内容元素在 dom 元素次序中优先位置
- 原理大致:采用负边距使得浮动元素达到预设的位置后,再使用padding使得两侧留出空白区域待左、右边距占用,然后再使用相对定位使得左右边距能够流向预定的位置
|
|
- 缺点:.main的最小宽度不能小于.aside的宽度
双飞翼布局
- 原理也是采用浮动元素负边距的特性使相关元素达到预定的要求后再设置响应的margin使得左、右边距正好处于margin的空间中
- 区别在于main里面的内容用wrap包裹着,减少了实现的步骤,对圣杯布局的缺点进行改良
|
|
- 负边距形成三栏布局的条件:1、需要左右侧边栏及主内容均为浮动的块级元素;2、主内容需在最前面;3、左侧边栏需设置margin-left为-100%,右侧边栏需设置margin-left为它本身宽度的负值
等边距排列
使用负边距还可以变大父元素,从而装下原本装不下的子元素达到等边距排列的效果
html代码
|
|
- CSS代码
|
|
CSS浏览器兼容性
CSS hack
- 同一份代码,有的浏览器效果正常,有的不正常,需要针对不同的浏览器去写不同的CSS,让它能在不同的浏览器中也能得到我们想要的页面效果
CSS hack的表现形式
- CSS属性前缀法(即类内部Hack)
- 选择器前缀法(即选择器Hack)
- IE条件注释法(即HTML头部引用if IE)
处理兼容问题的思路
- 产品的需求(产品的受众、受众的浏览器比例、效果优先还是基本功能优先)
- 做到什么程度(让哪些浏览器支持哪些效果)
- 根据兼容需求选择兼容工具(html5shiv.js、respond.js、css reset、normalize.css、Modernizr、postCSS)
- 根据兼容需求选择技术框架/库(Bootstrap (>=ie8),jQuery 1.~ (>=ie6), jQuery 2.~ (>=ie9) Vue (>= ie9))
- 条件注释、CSS Hack、js 能力检测做一些修补
渐进增强和优雅降级
- 渐进增强(progressive enhancement): 针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验
- 优雅降级 (graceful degradation): 一开始就构建完整的功能,然后再针对低版本浏览器进行兼容
常见浏览器兼容的写法
- IE条件注释
- 属性选择器
- 选择器前缀法
- 使用兼容工具
- js 修补
IE条件注释(即HTML条件注释Hack)
- 条件注释 (conditional comment) 是于HTML源码中被IE有条件解释的语句。条件注释可被用来向IE提供及隐藏代码
- IE10+已经不再支持条件注释
|
|
属性选择器(即类内部Hack)
- IE6能识别下划线和星号,IE7能识别星号,但不能识别下划线,IE6~IE10都认识”\9”,但firefox前述三个都不能认识
|
|
选择器前缀法(即选择器Hack)
- 原理与属性前缀法法类似,在选择器前面加下划线或星号,区分开能否识别它们的浏览器
|
|
使用兼容工具
- html5shiv.js
- respond.js
- css reset
- normalize.css
- Modernizr
- postCSS
js 修补
- 一些简单的兼容问题,可以自己写一段 js 代码去实现该功能
其它处理兼容方法(积累)
- CSS块级兼容
|
|
- 清除浮动
|
|
浏览器兼容工具 / 名词
条件注释
- 是于HTML源码中被IE有条件解释的语句。条件注释可被用来向IE提供及隐藏代码
IE Hack
- IE6能识别下划线和星号,IE7能识别星号,但不能识别下划线,IE6~IE10都认识”\9”
- 不同版本的 IE 浏览器有各自的 bug,基于这些bug,我们能针对性的写代码
js 能力检测
- 不去看浏览器的版本和种类,而是直接去检测浏览器支不支持该功能,得出结论后再去针对性的解决兼容问题
html5shiv.js
- IE9以下版本浏览器对HTML5新增标签不识别,并导致CSS不起作用的问题。所以我们在使用过程中,想要让低版本的浏览器,即IE9以下的浏览器支持,可以使用该工具
respond.js
- IE6-8等老版本的浏览器不支持CSS3的媒体查询功能,那么就可以用这个工具,用 js 去实现响应式
css reset
- 对浏览器的默认样式全部重置,全部推倒重来
normalize css
- 标准化CSS,让不同浏览器的CSS样式统一
Modernizr
- Modernizr使你可以方便地为各种情况编写JavaScript和CSS,无论浏览器是否支持这些特性。这是处理渐进增强的完美方案。
- Modernizr会在页面加载后立即检测特性;然后创建一个包含检测结果的 JavaScript 对象,同时在html元素加入方便你调整 CSS的class名
postCss
- 它可以被理解为一个平台,可以让一些插件在上面跑,它提供了一个解析器,可以将CSS解析成抽象语法树,通过PostCSS这个平台,我们能够开发一些插件,来处理CSS。热门插件如autoprefixer,它可以帮我们处理兼容问题,只需正常写CSS,autoprefixer可以帮我的自动生成兼容性代码
>>查兼容
>>查hack写法
CSS编码规范
CSS命名规则
- 语义化标签优先
- 基于功能命名、基于内容命名、基于表现命名
- 简略、明了、无后患
命名的范例
- 语义化标签优先
|
|
|
|
- 基于功能命名、基于内容命名、基于表现命名
|
|
|
|
- 简略、明了、无后患
|
|
|
|
命名范例
|
|
命名的单词
|
|
CSS书写规范
- tab 用两个空格表示
- css的 :后加个空格, {前加个空格
- 每条声明后都加上分号
- 换行,而不是放到一行
- 颜色用小写,用缩写, #fff
- 小数不用写前缀, 0.5s -> .5s;0不用加单位
- 尽量缩写, margin: 5px 10px 5px 10px -> margin: 5px 10px
|
|
>>boostrap的编码规则
垂直居中的实现方式
设置上下padding相等(文本垂直居中)
- 假如父容器的高度(未设定)由内容撑开,可以设置上下padding一样来达到垂直居中的效果
|
|
设置line-height(文本垂直居中)
- 当父容器设置宽度时,设置line-height=height,能实现垂直居中
|
|
设置伪元素(文本垂直居中)
- 假如父容器的高度是确定的,可以添加一个伪元素.middle::before
- 构造一个高度撑满父容器,垂直居中的元素,对它垂直居中,那么就是对父容器垂直居中了
|
|
设置table-cell(文本垂直居中)
- 假如父容器的高度是确定的,可以将父容器的 display 属性设置成 table-cell,再添加 vertical-align: middle;来达到垂直居中的效果
- 优点:简单方便。
- 缺点:这样改变了父容器的display属性,可能会有副作用,而且IE6、IE7不支持display:table-cell,IE8及以后的版本才能用
|
|
设置绝对定位(元素垂直居中)
- 假如父容器的宽高是确定的,就可以用绝对定位来达到居中的效果
|
|
设置CSS3 transform(元素垂直居中)
- 假如父容器的高度(未设定)由内容撑开,如果按绝对定位设置,不知道margin-top的具体值,可以使用CSS3 transform实现垂直居中
|
|
code:tooltip的如下效果图
explain
|
|
学习