¶一、元素分类
¶1. 行内元素/内联元素(inline)
(1)行内元素不会独占一行,和其他元素都在一行上,当遇到父级元素边界才会被迫自动换行。
(2)设置宽高无效。
宽度:设置width无效,内容决定宽度(如果没有内容宽度默认为0)。
高度:设置height无效,内容决定高度(如果没有内容高度默认为0)。
(3)一般情况行内元素只能容纳文本或者其他行内元素(如文字/图片/超链接),不能包含块级元素。
(4)margin和padding对行内元素的左右方向有效,而上下无效。
此外有一点需要注意:padding对行内元素的上下方向实际上是无效的,即使设置了padding-top或者padding-bottom的行内元素,背景渲染的时候依然会渲染上,行内非替换元素上设置的上内边距不会影响行高计算,因此,如果一个元素既有内边距又有背景,从视觉上看可能延伸到其他行,有可能还会与其他内容重叠,但是不会挤开其他盒子的内容了,此时称这个行内元素为 “残疾的盒模型”,这种情况是毫无意义的,开发中要避免对行内元素设置padding-top或者padding-bottom。
盒模型中padding, border 与块级元素并无差异,都是标准的盒模型,但是 margin却只有水平方向的值,垂直方向并没有起作用。
替换的行内元素具有“内在尺寸”,尺寸是有自身决定的,而不会受周围环境的影响,如
<img>
和<input>
等,替换的行内元素的高度是由height属性决定。
非替换的行内元素(如 a,span等元素)的宽度是其内容经过浏览器解释后实际的宽度,而不能通过设定width属性为非替换的行内元素设置宽度,非替换的行内元素的高度是有框高度的行高决定的。
垂直方面的边距对于非替换的元素无效,对于替换的行内元素可以达到应用的效果。
常见内联元素:
1 | ◎ a - 锚点 |
¶2. 块级元素(block)
(1)块级元素独占一行。
(2)能设置宽高。
- 宽度:1、可以自行设置width的值;2、如果没有设置width,宽度的值为auto(即默认宽度是父元素的宽度)。
- 高度:1、可以自行设置height的值;2、如果没有设置height,默认值为0;
(3)一般情况下,可容纳行内元素和其他块级元素以及行内块元素。
(4)内外边距都可以设置,即margin和padding对块级元素的上下左右方向有效。
常见块元素:
1 | ◎ address - 地址 |
¶3. 行内块元素(inline-block)
(1)行内块元素不会独占一行,和其他行内块元素都在一行上,当遇到父级元素边界才会被迫自动换行。
(2)能设置宽高。
-
宽度:1、可以自行设置width的值,2、如果没有设置width,内容决定宽度。
-
高度:1、可以自行设置height的值,2、如果没有设置height,内容决定高度。
(3)一般情况下,可容纳行内元素和其他块级元素以及行内块元素。
(4)内外边距都可以设置,即margin和padding对行内块元素的上下左右方向有效。
¶4. 元素显示模式转化
行内元素、块级元素和行内块级元素之间可以任意转化显示模式。
1 | display: inline; /*转化显示模式为行内元素*/ |
¶二、布局方式
网页布局方式就是浏览器对网页元素进行排版的方式。共有三种方式:
¶1. 标准流(文档流/普通流)的排版方式
(1)是浏览器默认的排版方式。
(2)在标准流中,浏览器对网页的布局分为垂直排版和水平排版两种布局。在css中,又将元素分为块级元素、行内元素和行内块级元素三种元素。
-
**垂直排版:**块级元素:独占一行,可以设置宽高。
-
水平排版:行内元素:不独占一行,可在一行内排布,不能设置宽高。行内块级元素:不独占一行,可在一行内排布,能设置宽高。
*备注:盒子嵌套关系中,如果子元素的高度大于父元素的高度(或者父元素没有设置高度),那么子元素会撑起父元素的高度。*
¶2. 浮动流的排版方式
(1)是一种“半脱离标准流”的排版方式。浮动元素只在浮动前为标准流元素时所在的行内进行浮动,不会跑到其他行去。
(2)只有一种排版方式,即水平排版。
(3)只能设置元素左对齐或者右对齐,不能设置居中对齐。
(4)**浮动流解决的问题:**解决了标准流不方便让元素左对齐和右对齐的问题。
(5)浮动流的特点:
①. 不区分块级元素、行内元素、行内块级元素的排版方式。浮动流中的所有元素都是水平排版并且行内元素在浮动流中能够设置宽高。
1 | <!-- |
②. 浮动流中的所有元素都和标准流中行内块级元素很相似。
③. 浮动元素排序规则。
- 相同方向的浮动元素:先浮动的在前面,后浮动的会显示在后面。
- 不同方向上的浮动元素:左浮动的往左边显示,右浮动的往右边显示。
- 浮动元素浮动之后的位置,由浮动元素浮动之前在标准流中的位置来确定。
④. 浮动元素只会覆盖标准流元素,不会覆盖浮动流元素。
⑤. 浮动元素的“脱标“
- 在同父元素内,如果前面的一个元素浮动了,而后面的块级元素没有浮动,那么前面的元素会从标准流中脱离出来,就会空出一个位置,后面没有浮动的标准流元素就会按照标准流向左上角排版的规则填充这个空出来的位置。效果是会盖住后面同位置的元素。
- 反过来,如果前面是标准流块级元素,后面是浮动流元素,那么后面的浮动流元素是不会覆盖住前面的标准流块级元素的,因为没有空出的位置给浮动元素填充,此时的浮动元素只会在前面的标准流块级元素的下一行浮动显示。
1 | <!-- |
⑥. 浮动元素的贴靠现象:
- 如果父元素中的浮动行的宽度能够容得下所有浮动元素,那么浮动元素并排显示。
- 如果父元素中的浮动行的宽度无法容得下所有浮动元素,那么最后一个元素会开始往下行移动以致于能够贴靠,即从此元素前的先前浮动元素一个一个检查,如果容得下这个元素,那么贴靠在这个先前浮动元素边上。
- 如果贴靠了前面所有浮动元素之后都不能容的下,最终会贴靠在这些浮动元素所在的父元素的左边或者右边上。
1 |
|
⑦. 浮动元素的字围现像。
浮动元素会覆盖掉后面的标准流元素,但不会盖住标准流元素中的文字。
1 |
|
⑧. 在浮动流中元素(内容)不会撑起父元素的高度。
¶3. 定位流的排版方式
¶三、网页设计技巧
垂直方向一般使用标准流,水平方向一般用浮动流。