类选择器 (.className)
ID选择器 #id
通配符选择器( * )
标签选择器(div, h1, p)
属性选择器(a[rel = "external"]) 除了等号还可以有 ~=(完整包含)、^=(开头)、$=(结尾)、*=
( 包含)、|=(连字符衔接的开头)
组合选择器 包括相邻选择器(h1 + p)、子选择器(ul > li)、后代选择器(li a)、同级且在之后的选择器(.a ~ .b)
伪元素选择器(::fist-line,::first-letter,::after,::before)
伪类选择器
结构型伪类选择器(:root,:first-child,:last-chilid,:nth-child(n),:nth-last-child(n),:only-child,:empty...)
以上child都可以换成of-type。两者的区别是:child是在父元素的所有子元素(包括不同类型)中定位,如果这个元素符合前面的选择器就选中;而of-type是在父元素所有符合前面选择器(都是同类型)的子元素中定位。
链接伪类选择符(:link,:visited)
用户行为伪类选择符(:hover,:active,:focus)
目标伪类选择符(:target 当一个元素被指向URI目标时)
元素状态伪类选择符(:enabled,:disabled,:checked)
逻辑性伪类选择符(:not(s))
行内样式1000 -- id100 -- 类、伪类、属性选择器10 -- 类型选择器、伪元素选择器1
通过相加计算大的优先级高,值相等的话后声明的优先级高。如果权重相同,则最后定义的样式会起作用,但是应该避免这种情况出现。
浏览器从右到左解析css选择符,并且越具体的选择符查找效率越高(比如id显然高于标签选择符)。
优化CSS选择器效率,可以从以下几个方面:
参考 https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Writing_efficient_CSS
1.背景属性 background(-attachment,-color,-image,-position,-repeat)
background-attachment设置背景是否随文档滚动,默认为scroll,可以设置为fixed(相对于可视区域固定)。
2.边框属性
border
outline(-color,-style,-width)
3.文本属性
color 设置文本颜色
direction 设置文本方向。
line-height 设置行高。
letter-spacing 设置字符间距。
text-align 对齐元素中的文本。
text-decoration 向文本添加修饰。
text-indent 缩进元素中文本的首行。
text-shadow 设置文本阴影。
text-transform 控制元素中的字母。
unicode-bidi 设置文本方向。
white-space 设置元素中空白的处理方式。
word-spacing 设置字间距。
4.字体属性 font(-family,-size,-style,-weight,-variant)
5.列表属性(list-style,list-stle-image,list-position,list-style-tpe)
6.表格属性(border-collapse,border-spacing,caption-side,empty-cells,table-layout)
还有与盒模型、定位相关的属性在下面介绍。
关于百分比是相对宽度高度这个那个计算很容易搞混,总结如下:
百分比的继承:如果某个元素设置了百分比的属性,则后代元素继承的是计算后的值
比如行高的继承:当子元素没有设置行高时,父元素行高设置为百分比形式,则由父元素字体大小乘以父元素行高百分比值计算出父元素行高,子元素继承这个值;当父元素行高设置为1.5这样形式,则子元素直接继承这个行高值,和子元素字体大小相乘来计算。
以上引用自CSS属性之经常出现的百分比
盒模型包括: 内容(content)、填充(padding)、边框(border)、边界(margin)。
有两种:IE 盒子模型和标准 W3C 盒子模型。区别是元素width、height属性的计算方式不同,W3C盒模型元素宽高只对内容部分计算,而IE是对content+左右padding+左右border计算。
有以下三种值:content-box(默认), padding-box和border-box。
含义是元素width、height属性的计算方式,content-box是只包括内容部分,padding-box是content+左右padding,border-box是content+左右padding+左右border。
在margin属性中一共有两类参考线,top和left的参考线属于一类,right和bottom的参考线属于另一类。top和left是以外元素为参考,right和bottom是以元素本身为参考。margin的位移方向是指margin数值为正值时候的情形,如果是负值则位移方向相反。
也就是说,top和left是该元素相对于与它相邻的元素移动,而right和bottom则是与该元素相邻的元素相对于该元素移动。
是什么:BFC(block formatting context)中相邻的两个block-level的盒,上一个box的下边距会跟下一个box的上边距发生叠加,即两者取最大的,而不是相加。行内框、 浮动框或绝对定位框之间的外边距不会叠加。
一般来说, 垂直外边距叠加有三种情况:
计算方式:margin值符号相同取绝对值大的,符号不同先分成正、负两种,分别取最大绝对值再两值叠加。如果有两个父元素,父元素中又有子元素,都符合以上margin叠加2,3点情况,那么要一起计算,把所有margin值放在一起按前面所说规则计算。
参考 CSS框模型和谈外margin collapsing(外边距叠加)
普通流是元素按照其在 HTML 中的位置顺序决定排布的过程,大部分元素排布在普通流中。而普通流中的元素一定位于某一格式化上下文,有上文提到的BFC(块级格式化上下文)还有一种IFC(行内格式化上下文)。
在BFC中,盒呈纵向排布,在IFC中,盒则呈横向排布。
任何一个IFC不能直接放入BFC中,在BFC中的行内元素会被匿名的块级盒包裹。
一个创建了新的BFC的盒子是独立布局的,盒子里面的子元素的样式不会影响到外面的元素。在同一个BFC中的两个相邻的块级盒在垂直方向(和布局方向有关系)的margin会发生折叠。
在进行盒子元素布局的时候, BFC 提供了一个环境, 在这个环境中按照一定规则进行布局不会影响到其它环境中的布局。如果一个元素符合了成为 BFC 的条件,该元素内部元素的布局和定位就和外部元素互不影响(除非内部的盒子建立了新的 BFC), 是一个隔离了的独立容器。
规定满足下列CSS声明之一的元素便会生成BFC。元素
BFC有以下特性:
普通流(文档流)指元素按照其在 HTML 中的位置顺序决定排布的过程。
一些特性:
浮动 float:left(right)浮动框左右移动直到外边缘碰到包含框或另一个浮动框的边缘。浮动框不在普通流中。行框围绕浮动框。创建浮动框可以使文本围绕图像。对行框应用clear:(left\right\both\none)
,表示框的哪些边不应该挨着浮动框。会将元素的display属性变更为block。
浮动特性:
float高度塌陷解决方案:
添加空div(clear:both;)清理浮动
after伪元素
.floatfix:after{
clear:both;content:".";
height:0;display:block;
visibility:hidden;}
或者
.floatfix:after{ content:""; display:table; clear:both; }
使父容器形成BFC,比如父容器也float,父元素设置overflow:auto;zoom:1
1.同时应用
2.覆盖问题
3.清浮动问题
4.position:absolute和float属性的异同
层叠上下文:层叠上下文是HTML元素的三维概念,这些HTML元素在一条假想的相对于面向(电脑屏幕的)视窗或者网页的用户的z轴上延伸,HTML元素依据其自身属性按照优先级顺序占用层叠上下文的空间。特性有
层叠水平:决定了同一个层叠上下文中元素在z轴上的显示顺序。层叠水平的比较只有在当前层叠上下文元素中才有意义。
层叠顺序:元素发生层叠时候的特定的垂直显示顺序。 原则:
常见的创建层叠上下文的方法:
z-index可以设置成三个值:
z-index属性目前只有在position:relative、position:absolute参与的情况下才有作用,表示层级。
其次需要注意以下几点:
参考 深入理解CSS中的层叠上下文和层叠顺序 和 不起眼的 z-index 却能牵扯出这么大的学问
见博文 水平垂直居中总结
居中一个浮动元素:浮动元素宽高确定,设置postion:relative,并使用负margin法
.div {
width:500px ; height:300px;//高度可以不设
margin: -150px 0 0 -250px;
position:relative;相对定位
background-color:pink;//方便看效果
left:50%;
top:50%;
}
和 | )
元素的display属性会决定盒是行内级还是块级:
元素display属性和格式上下文的关系:
display:block和inline的区别?
inline-blockinline-block是元素在父元素中像行内元素一样的表现(可横排),但是它自身又向块元素一样可设置宽高,可容纳块元素。 inline-block空隙怎么解决
display:none和visibility:hidden的区别?
position跟display、margin collapse、overflow、float这些特性相互叠加后会怎么样?一、position和float的关系 1.同时应用
2.覆盖问题(层叠上下文解释)
二、display和position、float的关系 float的值不为none、position的值为absolute或fixed着两种情况,元素的display值会有调整,大概的转换规则为inline-table转为table,其他常见的转为block,list-item保持。 具体参看http://www.cnblogs.com/jackyWHJ/p/3756087.html 三、margin collapse 和display、float、position、overflow的关系 BFC(block formatting context)中相邻的两个块级盒,上一个box的下边距会跟下一个box的上边距发生叠加,即两者取最大的,而不是相加。行内框、浮动框或绝对定位框之间的外边距不会叠加。 规定满足下列CSS声明之一的元素便会生成BFC。元素
行内块不叠加是因为它不生成BFC,而浮动框、绝对定位框和设置了overflow不为visible的元素不叠加是因为它们生成了新的BFC,不在同一BFC中自然不叠加了。这里可以直接给后一个元素设置浮动或绝对定位属性,而overflow得新加一个父元素在父元素中设置。 四、overflow和float、margin collapse的关系 当overflow的值不为visible时可以生成BFC。 解决浮动塌陷:可以给浮动元素父元素设置overflow:hidden(或其他不为visible的值)使父元素生成BFC来解决浮动塌陷问题。 生成新的BFC解决左边重合:在一个BFC中,每个元素的margin box的左边,与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。所以当前一个元素设置float:left时,它脱离文档流,后一个盒子就会向上走,而它们的左边都和包含块的border box想接触,所以在没设置margin的情况下会导致重叠。这时候可以用overflow来给后一个元素生成新的BFC,它就不会和包含块的border box 左边相接触了。(可以用于两栏布局) 解决margin collapse:给外边距叠加的元素之一加上一个设置了overflow属性不为visible的父元素,生成新的BFC,外边距就不叠加了。因为此时那两个元素不处于一个BFC了。 具体参看 http://www.html-js.com/article/1866 |
---|