GVKun编程网logo

css中line-height与vertical-align(css中line-height与height的区别)

27

本文将分享css中line-height与vertical-align的详细内容,并且还将对css中line-height与height的区别进行详尽解释,此外,我们还将为大家带来关于CSSverti

本文将分享css中line-height与vertical-align的详细内容,并且还将对css中line-height与height的区别进行详尽解释,此外,我们还将为大家带来关于CSS vertical-align 属性、CSS vertical-align的用法、css – vertical-align:baseline的处理是什么?、CSS 的 vertical-align的相关知识,希望对你有所帮助。

本文目录一览:

css中line-height与vertical-align(css中line-height与height的区别)

css中line-height与vertical-align(css中line-height与height的区别)

在博客园中看到这篇博文http://www.cnblogs.com/jaycewu/p/8068130.html,对行高的知识点讲解的很详细,故转到自己的博客中学习一下。

正文:

1、顶线、中线、基线、底线:

从上到下分别是顶线,中线,基线,底线。vertical-align的四个属性top,middle,baseline,bottom就是与这四条线有关。

2、行高,行距,半行距

行高line-height是指上下文本行基线间的垂直距离。(上图中两条红线间的垂直距离)

行距是指一行底线到下一行顶线的垂直距离。(第一条粉线和第二条绿线间的垂直距离)

半行距就是行距/2。半行距=(行高 - 字体size)/2

3、内容区、行内框、行框

内容区:顶线和底线包裹的区域(字体的size)

行内框:在没有其他因素影响的时候(padding等),行内框等于内容区。而设定行高时行内框高度不变,半行距分别增加/减少到内容区的上下两边(深蓝色区域)行框(line Box)。(字体size不变,修改行高就是修改行距)

行框:行框高度等于本行内所有元素中行内框最大的值(以行高值最大的行内框为基准,其他行内框采用自己的对齐方式向基准对齐,最终计算行框的高度),当有多行内容时,每行都会有自己的行框。

CSS vertical-align 属性

CSS vertical-align 属性

定义和用法

vertical-align 属性设置元素的垂直对齐方式。

说明

该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐。允许指定负长度值和百分比值。这会使元素降低而不是升高。在表单元格中,这个属性会设置单元格框中的单元格内容的对齐方式。

QQ图片20170214145713.png

可能的值

QQ图片20170214145713.png

更多CSS vertical-align 属性 相关文章请关注PHP中文网!

立即学习“前端免费学习笔记(深入)”;

CSS vertical-align的用法

CSS vertical-align的用法

CSS vertical-align属性设置元素的垂直对齐方式( text-align: center;表示水平居中)。该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐,允许指定负长度值和百分比值。

一、vertical-align语法

vertical-align:baseline | sub | super | top | text-top | middle | bottom | text-bottom

二、vertical-align可能的值

描述
baseline 默认。元素放置在父元素的基线上。
sub 垂直对齐文本的下标。
super 垂直对齐文本的上标
top 把元素的顶端与行中最高元素的顶端对齐
text-top 把元素的顶端与父元素字体的顶端对齐
middle 把此元素放置在父元素的中部。
bottom 把元素的顶端与行中最低的元素的顶端对齐。
text-bottom 把元素的底端与父元素字体的底端对齐。
length 用长度值指定由基线算起的偏移量。可以为负值。基线对于数值来说为0
% 使用 "line-height" 属性的百分比值来排列此元素。允许使用负值。
inherit 规定应该从父元素继承 vertical-align 属性的值。

三、vertical-align常用的两种情况

1、vertical-align可以用在display:table-cell 的下面

典型的就是td,这时的有四个可取值baseline|top|middle|bottom。这种情况下比较简单,分别用cell box的baseline、top、middle、bottom对齐这一行的baseline、top、middle、bottom即可。

 

2、用于inline-level elements 

影响它在其line-box里的垂直位置。line-box的高度由其中的inline-level元素计算,对于inline-replace元素就为其margin box的height,no-replace元素为其line-height。

四、vertical-align实例

HTML 代码   复制


<div>
    <span></span>
    <img src="r_474。jpg" width="100"/>
</div>

说明

一个无语义的span,用于使line box高度与div一样。计算line box的baseline,这里参与计算的只有strut box这个臆想的box,算出baseline,用span的垂直中心对齐,这时span就会像上移动,而span又是支撑这个line box高度的,等于line box往上移,用line box的中心对齐line box 的baseline,这样line box的垂直中线就是baseline。img 的middle就按这个baseline 做为基础来对齐。所以就居中了。

css – vertical-align:baseline的处理是什么?

css – vertical-align:baseline的处理是什么?

我以为我了解CSS的方式,但我现在需要向某人解释一些东西,我发现我做不到.

我的问题基本上归结为:为什么在同一行中存在其他对齐时,vertical-align:baseline被忽略了?

示例:如果第二个span具有vertical-align:bottom,则第一个span的垂直对齐如果是基线则被忽略;它表现得好像它也有底部.

span:first-child {vertical-align:baseline}
span:last-child {font-size:3em; vertical-align:bottom;}
<p>
  <span>one</span> <span>two</span>
</p>

如果所有跨度都具有基线以外的垂直对齐,或者如果它们都是基线,则它们的行为与预期一致.

span:first-child {vertical-align:top}
span:last-child {font-size:3em; vertical-align:bottom;}
<p>
  <span>one</span> <span>two</span>
</p>
span:first-child {vertical-align:baseline}
span:last-child {font-size:3em; vertical-align:baseline;}
<p>
  <span>one</span> <span>two</span>
</p>

如果这是正常行为,那为什么不在任何地方描述?我没有找到任何说明基线和顶部/底部以这种方式相互干扰的来源.

解决方法

垂直对齐

vertical-align用于对齐inline-level elements.这些是元素,其display属性的计算结果为:

>内联
>内联块
>内联表(在此答案中未考虑)

内联级元素以行的形式排列在一起.一旦有多个元素不适合当前行,就会在其下面创建一个新行.所有这些线都有一个所谓的线框,它包含了线的所有内容.尺寸不同的内容意味着不同高度的线框.

在下图中,线框的顶部和底部用红线表示.

在这些线框内,垂直对齐属性负责对齐各个元素.

底线

垂直对齐的最重要参考点是所涉及元素的基线.在某些情况下,元素封闭盒的顶部和底部边缘也变得很重要.

内联元素

线高的顶部和底部边缘由红线表示,字体的高度由绿线表示,基线由蓝线表示.

在左侧,文本的行高设置为与font-size相同的高度.绿色和红色线在每侧折叠成一条线.

在中间,行高是font-size的两倍.

在右侧,线条高度是字体大小的一半.

请注意,如果行高小于字体高度,则内联元素的外边缘(红线)无关紧要.

内联块元素

从左到右,您会看到:

>具有in-flow内容的内联块元素
>一个内联块元素,内容为in-flow,溢出:隐藏
>没有in-flow内容的内联块元素(但内容区域有高度)

边距的边界用红线表示,边框是黄色,填充绿色,内容区域是蓝色.每个内联块元素的基线显示为蓝线.

内联块元素的基线取决于元素是否具有in-flow内容.的情况下:

> in-flow内容内联块元素的基线是正常流程中最后一个内容元素的基线(左侧示例)
> in-flow内容但溢出属性评估为除可见之外的其他内容,基线是边距框的下边缘(示例在中间)
>没有in-flow内容,基线再次是边距框的下边缘(右边示例)

线框

使用vertical-align时,这可能是最令人困惑的部分.这意味着,基线被放置在需要的地方,以满足所有其他条件,如垂直对齐和最小化线盒的高度.它是等式中的自由参数.

由于线框的基线是不可见的,因此它可能不会立即显而易见.但是,你可以很容易地看到它.只需在问题的行尾添加一个字符,如图中的“x”.如果此字符未以任何方式对齐,则默认情况下它将位于基线上.

在它的基线周围,线框有我们称之为文本框的内容(图中的绿线).文本框可以简单地被视为行框内的内联元素,没有任何对齐.它的高度等于其父元素的字体大小.因此,文本框仅包含行框的无格式文本.由于此文本框与基线相关联,因此它会在基线移动时移动.

片段

如果您想在此处使用各种vertical-align和font-size进行一些实验,那么您可以使用一个片段来试用它.也可在JSFiddle.

let sl1 = document.getElementById('sl1');
let sl2 = document.getElementById('sl2');
let sl3 = document.getElementById('sl3');
let sl4 = document.getElementById('sl4');
let elm1 = document.getElementById('elm1');
let elm2 = document.getElementById('elm2');
let elm3 = document.getElementById('elm3');
let elm4 = document.getElementById('elm4');
let ip1 = document.getElementById('ip1');
let ip2 = document.getElementById('ip2');
let ip3 = document.getElementById('ip3');
let ip4 = document.getElementById('ip4');
let slArr = [sl1,sl2,sl3,sl4];
let elmArr = [elm1,elm2,elm3,elm4];
let ipArr = [ip1,ip2,ip3,ip4];
let valueArr = ['baseline','top','middle','bottom'];
for (let i = 0; i < slArr.length; i++) {
  slArr[i].addEventListener('change',(event) => {
    elmArr[i].style.verticalAlign = event.target.value;
    elmArr[i].innerHTML = event.target.value;
    addDiv();
  })
}
for (let i = 0; i < ipArr.length; i++) {
  ipArr[i].addEventListener('change',(event) => {
    elmArr[i].style.fontSize = event.target.value + 'em';
    addDiv();
  })
}

document.getElementById('btnRandom').addEventListener('click',() => {
  for (let i = 0; i < elmArr.length; i++) {
    let element = elmArr[i];
    let fontSize = Math.floor(Math.random() * 4 + 1);
    ipArr[i].value = fontSize;
    element.style.fontSize = fontSize + 'em';
    let styleIndex = Math.floor(Math.random() * 4);
    element.style.verticalAlign = valueArr[styleIndex];
    element.innerHTML = valueArr[styleIndex];
    slArr[i].selectedindex = styleIndex;
  }
},this);

function addDiv() {
  let view = document.getElementById('viewer');
  view.innerHTML = "";
  elmArr.forEach(function(element) {
    let div = document.createElement('div');
    div.appendChild(element.cloneNode());
    view.appendChild(div);
  },this);
}
.header span {
  color: #000;
}

select {
  width: 100px;
}

#elms {
  border: solid 1px #000;
  margin-top: 20px;
  position: relative;
}

span {
  color: #FFF;
  font-size: 1em;
}

#elm1 {
  background-color: #300;
}

#elm2 {
  background-color: #6B0;
}

#elm3 {
  background-color: #90A;
}

#elm4 {
  background-color: #B00;
}

div {
  z-index: -1;
}

#div1 {
  width: 100%;
  height: 1px;
  background-color: #000;
  position: absolute;
  left: 0;
  top: 25%;
}

#div2 {
  width: 100%;
  height: 1px;
  background-color: #000;
  position: absolute;
  left: 0;
  top: 50%;
}

#div3 {
  width: 100%;
  height: 1px;
  background-color: #000;
  position: absolute;
  left: 0;
  top: 75%;
}
<div> <spanhttps://www.jb51.cc/tag/dis/" target="_blank">display: block;float: left;margin-right: 20px;">vertical align</span> <span>font-size(em)</span> </div>
<div>

  <select name="sl1" id="sl1">
    <option value="baseline">baseline</option>
    <option value="top">top</option>
    <option value="middle">middle</option>
    <option value="bottom">bottom</option>
  </select>
  <input type="number" value="1" id="ip1" />
  <br>
  <select name="sl2" id="sl2">
    <option value="baseline">baseline</option>
    <option value="top">top</option>
    <option value="middle">middle</option>
    <option value="bottom">bottom</option>
  </select>
  <input type="number" value="1" id="ip2" />
  <br>
  <select name="sl3" id="sl3">
    <option value="baseline">baseline</option>
    <option value="top">top</option>
    <option value="middle">middle</option>
    <option value="bottom">bottom</option>
  </select>
  <input type="number" value="1" id="ip3" />
  <br>
  <select name="sl4" id="sl4">
    <option value="baseline">baseline</option>
    <option value="top">top</option>
    <option value="middle">middle</option>
    <option value="bottom">bottom</option>
  </select>
  <input type="number" value="1" id="ip4" />
  <br>
  <button id="btnRandom" (onclick)="random()">Random</button>
</div>
<div id="elms">
  <span id="elm1">one</span>
  <span id="elm2">two</span>
  <span id="elm3">three</span>
  <span id="elm4">four</span>
  <div id="div1"></div>
  <div id="div2"></div>
  <div id="div3"></div>
</div>
<div id="viewer"></div>

此片段由Duannx制作.

资料来源:请注意,这是由Christopher Aue撰写的Vertical-Align: All You Need To Know的摘录.

CSS 的 vertical-align

CSS 的 vertical-align

定义和用法

vertical-align 属性设置元素的垂直对齐方式。

说明

该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐。允许指定负长度值和百分比值。这会使元素降低而不是升高。在表格中,这个属性会设置单元格框中的单元格内容的对齐方式。

上面这段话,的确不是很好理解,没关系,我们先不用去管他,不过我们先要记住一个事情。

只有元素属于 inline 或是 inline-block ,vertical-align 属性才会起作用。
例如图片,按钮,单复选框,单行 / 多行文本框等 HTML 控件,只有这些元素默认情况下会对 vertical-align 属性起作用。

我们继续来看看,vertical-align 可以取的值

/* 关键值 */
vertical-align: baseline;    /*默认。元素放置在父元素的基线上*/ vertical-align: sub; /*垂直对齐文本的下标*/ vertical-align: super; /*垂直对齐文本的上标*/ vertical-align: text-top; /*把元素的顶端与父元素字体的顶端对齐*/ vertical-align: text-bottom; /*把元素的底端与父元素字体的底端对齐。*/ vertical-align: middle; /*把此元素放置在父元素的中部*/ vertical-align: top; /*把元素的顶端与行中最高元素的顶端对齐*/ vertical-align: bottom; /*把元素的顶端与行中最低的元素的顶端对齐*/ /* 长度值 */ vertical-align: 10em; vertical-align: 4px; /* 百分比值 */ vertical-align: 20%; /* 全局值 */ vertical-align: inherit; /*规定应该从父元素继承 vertical-align 属性的值*/ vertical-align: initial; /*设置属性的初始值——浏览器的默认定义值*/ vertical-align: unset; /*CSS 关键字 unset 是 关键字 initial 和 inherit的组合。 如果有继承父级样式,则将该属性重新设置为继承的值,如果没有继承父级样式,则将该属性重新设置为初始值。 换句话说这个unset关键字会优先用inherit的样式,其次会应该用initial的样式。*/

总结

这次主要说了一些 vertical-align 属性的基础的东西。 

1、只有元素属于 inline 或是 inline-block ,vertical-align 属性才会起作用。
2、vertical-align,取值是百分数值时,是相对于此标签继承的 line-height 值决定的。
3、line-height,取值是百分数值时,是相对于当前的 font-size 值决定的。 

 

我们今天的关于css中line-height与vertical-aligncss中line-height与height的区别的分享就到这里,谢谢您的阅读,如果想了解更多关于CSS vertical-align 属性、CSS vertical-align的用法、css – vertical-align:baseline的处理是什么?、CSS 的 vertical-align的相关信息,可以在本站进行搜索。

本文标签: