CSS 元素分类
block元素(块元素)
P|H1|H2|H3|H4|H5|H6|UL|OL|PRE| DL | DIV | NOSCRIPT | BLOCKQUOTE | FORM | HR | TABLE | FIELDSET | ADDRESS(随着html5标准的推进,一些元素将被废除,而一些新的元素将被引入)注意的是并非所有的block元素的默认display属性都是block,像table这种display:table的元素也是block元素。
inline元素(内联元素)
#PCDATA(即文本)| TT | I | B | BIG | SMALL|EM | STRONG | DFN | CODE |SAMP | KBD | VAR | CITE | ABBR | ACRONYM|A | IMG | OBJECT | BR | SCRIPT | MAP | Q | SUB | SUP | SPAN | BDO|INPUT | SELECT | TEXTAREA | LABEL | BUTTON
其他
其中有类特殊的元素:如img|input|select|textarea|button|label等,他们被称为可置换元素(Replaced element)。他们区别一般inline元素(相对而言,称non-replaced element)是:这些元素拥有内在尺寸(intrinsic dimensions),他们可以设置width/height属性。他们的性质同设置了display:inline-block的元素一致。
-
在div设置 line-height 中,其包含的span标签会继承其line-height 高度
-
块级元素的宽度默认自适应父元素宽度
-
如果有内联又有块级元素,块级元素的高度是由内部文档流中元素的总和决定的。内联元素的高度是由行高和行数决定的。
-
P块元素标签不允许放div
-
块元素不设置宽度的话,设置padding属性不会撑开盒子的宽度--即添加padding的效果,但不会增加额外的宽度
-
margin or padding?
- margin 不会显示出元素的背景色,padding会显示出背景色
- margin 如果父元素不设置border 或者 padding(参考下面) 那么会 引发父元素的塌陷问题
日常知识记录
居中显示
- 块级元素居中--
盒子指定宽度,左右外边距设置为auto;当一个盒子浮动、固定定位、绝对定位,margin:0 auto; 就不能用了 - 行内元素或者行内快元素水平居中须臾奥给父元素添加 text-align:center 即可
嵌套块元素垂直外边距的塌陷
两个嵌套关系的快元素(父子关系) 父元素有外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值
直白点就是:父元素的第一个子元素的上边距margin-top如果碰不到有效的border或者padding.就会不断一层一层的找自己“领导”(父元素,祖先元素)的麻烦。只要给领导设置个有效的 border或者padding就可以有效的管制这个目无领导的margin防止它越级,假传圣旨,把自己的margin当领导的margin执行。 对于垂直外边距合并的解决方案上面已经解释了,为父元素例子中的middle元素增加一个border-top或者padding-top即可解决这个问题。
解决方案:
- 为父元素定义上边框
- 为父元素定义内边距
- 为父元素添加overflow:hidden
不同元素默认自带内外边距
清楚内外边距:padding:0 margin :0 行内元素尽量只设置左右内外边距,不要设置上下内外边距
浮动
- 浮动会脱离标准文档流,浮动的盒子不再保留之前的位置,一行装不下就另起一行
- 浮动的元素会一行显示并顶部对齐
- 浮动的元素具有行内块元素的特性
- 浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流
注意: 一个元素浮动了,理论上其余兄弟元素也要浮动,以防止引起其他问题
如果行内元素添加了浮动,则不需要转换为行内块元素接口设置宽度和高度 如果块级盒子没有设置宽度,默认是和父级一样宽,但是添加了浮动之后,宽度大小根据内容来决定 浮动元素都具有行内块元素的特性
为何要清除浮动?
通常情况下不使用浮动的元素,父元素的高度是由子元素的高度决定的,如果在使用浮动的情况下,子元素设置浮动,父元素需要设置高度,不设置父元素的高度,那父元素高度将为0,引起布局异常
清除浮动的方法
-
额外标签法--W3C推荐 但是不常用 在最后一个浮动的元素后再
添加一个空的块级元素,并设置clear:both 阻止浮动继续传导;这样父元素也就具有子元素的高度 -
父元素添加overflow
给父元素添加overflow:hidden 、scroll 等
- 父级添加伪类after
.clearfix:after {
content: '';
height: 0;
line-height: 0;
display: block;
visibility: hidden;
clear: both;
}
- 父级添加双伪元素
.clearfix:after,
.clearfix:before {
content: "";
display: block;
clear: both;
}