css之line-height及圖片文字垂直居中


css雖然沒有算法,但還是很神奇的,踩到坑都不知道到底是哪里?看到張鑫旭大佬的博客講的超級好https://www.zhangxinxu.com

行高line-height用到的頻率極高,指一行文字的高度(兩行文字間基線的距離)就像英文本子里的 倒數第二條線。

line-height與line boxes高度

css中起着高度作用的heigh以及line-height,如果一個便簽沒有定義height屬性,那么最終表現的高度一定是line-height起作用。

一個空的<div></div>,沒有設置高度,但在元素內添加文字,這個div就有了高度,我一直以為就是文字把div撐起來了啊,但事實並非如此。真正撐起高度的是line-height。

<div class="test1">測試</div>
<div class="test2">測試</div>
css:
.test1{ font-size: 20px;   border: 1px solid #ccc;   background: #eee;   line-height: 0px; }
 
.test2{ font-size: 0px;    border: 1px solid #ccc;   background: #eee;   line-height: 20px; }

有圖有真相的證明了真正撐起div的高度的不是文字內容,而是line-height。

那到底line-height行高是怎么產生高低的?在inline box 模型中。有個lineboxes(是看不見的,作用就是包裹文字),一行文字一個line boxes(每行文字都有一個line boxes包裹)。line boxes並沒有什么特性,就高度。所以一個沒有設置height屬性的div的高度就是由一個個line boxes 的高度堆積而成的。

但line boxes的高度真正取決於里面的inline boxes。圖片,文字,<span>便簽等帶inline屬性的標簽。他看哪個inline boxes的實際line-height值最高最高個的那個line-height值作為line boxes的高度

行高的垂直居中性

上面那張測試的圖,證明,無論你文字是大還是小,其占據空間都是文字內容的公共水平中垂線。即使line boxes的高度為0,但他的文字的水平中垂線對稱分布這一特性可以實現文字或圖片的垂直居中對齊

 

 

文字或圖片垂直居中對齊問題
單行文字垂直居中:設置line-height。
一直一來我們記得但文本居中的方法height與line-height等高,但其實直接設置line-height就可以,那個height是多余的。
多文本垂直居中:

 

p{
  line-height: 150px;
  border: 1px dashed #ccc;
}
span{
  display: inline-block;       /*將多行文本當一行處理*/
  line-height: 1.4em;         /*line-height具有繼承性,需要重新設置*/
  vertical-align: middle;     /*中間線對齊*/
}
<p>
  <span>line-height為150px,font-size:12px<br>這里是第二行用來測試多行的顯示效果</span>
</p>

多圖片垂直居中

因為多圖片,但img不支持浮動,所有外面在套一層

方法1     圖片北京定位法:background-position:center:

 

ul li {
  width: 1em; /*根據font-size*/
  height: 1em;
  padding: 0.1em;
  margin: 0 0.1em 0 0;
  font-size: 128px;
  float: left;
  border: 1px solid #beceeb;
}

ul li img {
  display: block;
  width: 100%;
  height: 100%;
  background-repeat: no-repeat;
  background-position: center;
}

 

方法2    display:table-cell法

ul li {
  float: left;
  margin-right: 13px;
}

ul li div {
  display: table-cell;
  width: 144px;
  height: 144px;
  border: 1px solid #beceeb;
  font-size: 118px;
  text-align: center;
}

ul li div img {
  vertical-align: middle;
  width: 100px;
  height: 100px;
}
<ul>
  <li>
    <div>
      <img src="background.png" />
    </div>
  </li>
</ul>
方法3:inline-block垂直對齊    此方法只使用與多種圖片對齊,如果只有一張圖片,那就只能與空格對齊了
 
a{

display: inline-block;

width: 200px;

text-align: center;

vertical-align: center;

border: 1px solid peru;

}
img{
vertical-align: middle;
border: 1px solid red;
}
.one{
width: 100px;
height: 50px;
}
.two{
width: 100px;
height: 100px;
}
<div>
  <a href="#"><img class="one" src="1.jpg" alt=""></a>
  <a href="#"><img class="two" src="2.jpg" alt=""></a>
</div>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM