CSS内联元素


参考博客 https://www.cnblogs.com/wfeicherish/p/8884903.html

定义

内联元素(html规范中的概念)英文:inline element,其中文叫法有多种,如:内联元素、内嵌元素、行内元素、直进式元素等。基本上没有统一的翻译。另外提到内联元素,通常会涉及到的属性是display:inline;这个属性能够修复著名的IE双倍浮动边界问题。

常见的内联元素:

  • a – 锚点
  • br – 换行
  • code –计算机代码(在引用源码的时候需要)
  • i – 斜体
  • img – 图片
  • input – 输入框
  • label – 表格标签
  • span – 常用内联容器,定义文本内区块
  • strong – 粗体强调
  • textarea – 多行文本输入框

内联元素的性质

1、内联元素(inline)不会独占一行,相邻的内联元素会排在同一行。其宽度随内容的变化而变化。
2、内联元素不可以设置宽高
3、内联元素可以设置margin,但只在水平方向有效。
4、内联元素可以设置padding,水平方向有效,垂直方向上的padding其实是存在的,但是不占行内的高度。举个例子:

	<style>
	     #box2{
            background-color: cornflowerblue;
            height: 200px;
        }
        #box2 span{
            vertical-align: top;
            border: 3px solid #111;
            padding: 10px;
            margin: 10px;
        }
        #box2 div{
            background-color: yellow;
            width: 100px;
            height: 100px;
        }
	</style>
    <div id="box2">
        <span>hhhgaajj</span>
        <div>test</div>
    </div>

给span加了一个border显示效果如下:(发现其实上下的padding也是存在的,但是会影响上下元素的占位)
在这里插入图片描述
我们一般说内联元素是指display属性值为inline的元素,即,非置换元素(non-replaced element),这些元素满足上面的三条性质,这部分常见的元素包括:

  • span
  • a
  • strong
  • em

还有一些特殊的内联元素,主要包括三种:

1、可置换元素(Replaced element),如 img / input / select /textarea / button / label / svg 等,这些元素对应的就是非置换元素,不同之处在于可置换元素不用设置display属性,元素本身具有inline-block的性质。
2、所有 display 值以 inline-开头的元素,如 inline-table / inline-flex 。
3、处于某种特殊格式化上下文的内联元素,例如 flexbox。元素中的子元素都处于flex formatting context(弹性格式化上下文)中,这些子元素的 display 值都是「blockified」。

这些元素和非置换inline元素的区别在于:

  • 特殊的三种内联元素可以设置宽高,以及能设置水平垂直方向上的padding和margin,他们虽然不单独占一行,但是在所占区域有block的特性,就像inline-block,其既具有block的宽度高度特性又具有inline的同行特性;而非置换inline元素不能设置宽高和垂直方向的margin和padding。

line-height设置垂直居中的原理

元素的line-height不设置时,默认值为normal,取决于元素的font-size。
元素的height不设置时,默认值为auto,等于line-height。

对于一个内联元素,它有两个高度:content-area(内容区高度)和vitual-area(实际高度),实际高度就是line-height,这个高度用于计算 line-box 的高度,line-height 并非表示两个 baseline 之间的距离。
在这里插入图片描述
virtual-area 和 content-area 高度的差异叫做 leading。leading 的一半会被加到 content-area 顶部,另一半会被加到底部。因此 content-area 总是处于 virtual-area 的中间。

所以当设置line-height等于盒子的height时,content-area高度如果小于height,leading一定是一半在顶部一半在底部,这样就实现了居中。

line-box 计算的一些细节:

  • 对于inline元素,padding 和 border 会增大 background 区域,但是不会增大 content-area(不是 line-box 的高度)。一般来说你无法再屏幕上看到 content-area。margin-top 和 margin-bottom对两者都没有影响。
  • 对于可替换内联元素(replaced inline elements)、inline-block 元素和blockified 内联元素,padding、margin 和 border 会增大 height(译者注:注意 margin),因此会影响 content-area 和 line-box 的高度。
  • 受其子元素的 line-height 和 vertical-align 的影响。

另外补充一点:

line-height属性是可以被子元素默认继承的
比如说:

<style>
 #box3{
   	width: 100px;
    height: 100px;
    line-height: 100px;
    background-color: antiquewhite;
}
#box3 span{
    border: 1px solid red;
    font-size: 30px;
}
#box3 div{
    border: 1px solid red;
}

<div id="box3">
     <span>box3</span>
     <div>test</div>
 </div>

在这里插入图片描述
可以看到两个子元素span和div的line-height都变成了100px,而box3只有总的高度只有100px,所有div从容器溢出了。我们把父元素box3的高度去掉就好了。
在这里插入图片描述

vertical-align

vertical-align用于设置行内元素的垂直对齐方式。不设置时默认值为baseline,基于基线对齐。常用的有五个参数:

  • vertical-align: middle,用父元素 baseline 高度加上父元素中 x-height 的一半的高度来对齐当前元素的垂直方向的中点。baseline 所处的高度跟字体有关,x-height 的高度也跟字体有关,所以 middle 对齐不是绝对的居中对齐!
  • vertical-align: top / bottom,表示与 line-box 的顶部或底部对。
  • vertical-align: text-top / text-bottom,表示与 content-area 的顶部或底部对齐。

对于下图中的img底部空隙问题 ,设置img的vertical-align属性为上面五个值都可以解决。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值