参考链接:
理解以下名词,以及它们之间的关系。
- 块级元素,行内级元素
- 块级盒,行内级盒
- 块容器
- 块盒
- 匿名块盒,匿名行内盒
display属性为block || list-item || table的称为块级元素。
使用场景
-
常用的默认为块级元素的有(想都不用想,肯定是的):
div,form,p,pre,blockquote,h1~h6,table,ul,ol,li
-
h5中的块级元素(比较新的,但是可以想象出来是块级的):
article,canvas,footer,header,hgroup,noscript,video,section,output,figcation(图文信息组标题),figure(图文信息组)
-
比较少见的,用的少,而且有些还觉得不像的:
address,dd(定义列表中定义条目描述),dl(定义列表),hr(水平分割线),tfoot(表标注)
当我们在写项目的时候,大部分经常直接使用div标签,再添加class,而后修改display属性来改变它的模型值。
熟话说,有对比就有“伤害”,在其它文章中,说完块级元素就开始介绍它的子级了,但是我认为,如果想记住一个理论,有对比就会更鲜明点。所以,下面就来看,什么是行内级元素。
行内级元素是指源文档中不为内容生成新块的那些元素;内容被分配在多行(例如,一个段落中的强调部分,行内图片等等)。下面的“display”值将元素变成行内级:“inline”,“inline-table”,和“inline-block”。行内级元素生成行内级盒,这些盒处于一个行内格式化上下文中。
-
比较常见的行内级元素:
img,br,a,script,strong,em(斜体)span,sub,sup,button,input,label,select,textarea
-
比较少见的:
- b(粗体文本),big(大号字体), bdo(覆盖默认文本方向)
- abo, abbr(标记一个缩写),acronym(标记一个首字母缩写)
- cite(标签通常表示它所包含的文本对某个参考文献的引用), code(定义计算机代码文本),
- dfn(标签可标记那些对特殊术语或短语的定义),kbd(定义键盘文本), samp,var(表示变量的名称,或者由用户提供的值。), -map,object,q,i,small,tt,
看了这些理论似乎还是没什么很强的概念,除了要记住标签,我们还可以看个效果图来找出块级和行内级元素的区别。
块级元素:
可以发现特点是:
- 块级元素会新起一行
- 块级元素可以包含行内元素和其他块级元素
- 行内级元素不可以定高宽,不会起新行
- 一般情况下,行内级元素只能包含数据和其他行内元素。
首先先了解什么是块格式化和行格式化上下文。格式化上下文
- 块级盒(block-level boxes)是指那些作用在块格式化上下文中的盒。 每个块级元素生成一个主要块级盒,这个块级盒包含了块级元素的子孙盒以及生成的内容,并且同时参与定位方案。 除了主要块级盒外,有些块级元素还可能会生成额外的盒子:比如“list-item”元素。这些额外的盒子的位置与主要块级盒相关。
- 行级元素生成行内级盒,作用于行格式化上下文。行内级盒子包括行内盒子和原子行内级盒子两种,区别在于该盒子是否参与行内格式化上下文的创建。
- 行内盒子:inline box,参与行内格式化上下文创建的行内级盒子称为行内盒子。与块盒子类似,行内盒子也分为具名行内盒子和匿名行内盒子(anonymous inline box)两种。原子行内级盒子:atomic inline-level box,不参与行内格式化上下文创建的行内级盒子,原子行内级盒子的内容不会拆分成多行显示。
display属性为inline的非替换元素生成行内盒;inline-block元素是行内级元素,它自身作用于行格式化上下文,它生成的是块容器盒,该盒可以包含块级元素或行内级元素。
一个 块容器 要么只包含 块级盒,要么创建一个 IFC 而只包含 行内级盒,但不能同时包含 块级盒 和 行内级盒。
块容器 的 块级盒 称之为 块盒。
-
匿名行内盒:直接包含在块容器盒中的文本被当作是一个匿名行内盒。
-
匿名块盒:为了满足块容器的布局要求而定义出来的一种不具名的块盒。
一个匿名盒是匿名行内盒或者是匿名块盒跟它所属的上下文相关。 (块级或者行内,这个块容器布局条件中只能包含块级盒或者只能包含行内盒相关联)。
参考链接: 置换元素与非置换元素
在上个话题中,我们得出一个结论是行内级元素是不能定义高宽的,但是又有例外,比如img标签,它可以设置高宽。这个时候我们就会引入另一个名词来说明它,即 置换元素。
置换元素的解释:
一个 内容 不受CSS视觉格式化模型控制,CSS渲染模型并不考虑对此内容的渲染,且元素本身一般拥有固有尺寸(宽度,高度,宽高比)的元素,被称之为置换元素。即浏览器根据元素的标签和属性,来决定元素的具体显示内容。
比如 浏览器根据src 渲染 img的内容,根据 value 渲染 input , textarea等表单标签的内容。这些都是行内元素,同样也是置换元素,可以定义高宽。
浏览器在渲染 置换元素的时候遵循以下几个原则:
-
width: auto; height: auto;
则img的高宽为 :图片原始高宽 , input 为 默认高宽
-
width:auto; height:100px;
则img 的高度为100px,width 为 100px * 图片原始高宽比。比如原始高宽比为 1:2, 则 width = 200px;
*宽度确定,height:auto;*可以类推
-
除了上面的情况
当 width 的计算值为 auto 时,则宽度的使用值为 300px。比如iframe, canvas
若高度的计算值为 auto 且上述条件完全不符,则 height 的使用值 不能大于150px,且宽度不能大于长方形高度的2倍。