垂直居中&水平居中&垂直水平居中

垂直居中

行內(nèi)

單行行內(nèi)

設置子元素line-height(行高)等于父盒子高度

  .box{
           height: 300px;
           width: 300px;
           background: #FF6666;
       }
    a{
            line-height: 300px;
     }
<div class="box">
    <a href="">111</a>
</div>

!!! 注意:行內(nèi)元素沒有屬性width 和 height
還有 margin-top 和 margin-bottom 對內(nèi)聯(lián)元素(行內(nèi)元素)的高度沒有影響,并且由于margin是透明的,他也沒有任何的視覺影響。

 #box{
           height: 300px;
           width: 300px;
           background: #FF6666;
           margin-top: 100px;
       }
        a{
           color: #6666FF;
            border-bottom: solid red 2px;
            padding-bottom: 30px;
            margin-bottom: 40px;
            margin-left: 20px;
            padding-left: 30px;
            border-left: orange solid 2px;
            background: orangered;
        }
<body>
<div id="box">
    <a href=""id="aaa">111</a>
</div>
<script>
    var aaa = document.getElementById("aaa");
    var contentHeight = window.getComputedStyle(aaa).height;
  var contentWidth = window.getComputedStyle(aaa).width;
    console.log(contentHeight);
    console.log(contentWidth);
</script>
</body>

控制臺輸出auto


多行行內(nèi)

重新審視一下 CSS vertical-align 屬性 的定義:

該屬性定義行內(nèi)元素的基線相對于該元素所在行的基線的垂直對齊。允許指定負長度值和百分比值。這會使元素降低而不是升高。在表單元格中,這個屬性會設置單元格框中的單元格內(nèi)容的對齊方式。

--- inline水平的元素無法設置line-height,所以display要設置成inline-block

方法一:
    <style>
        *{padding: 0;margin:0;font-size: 12px;}
        div{
              float: left;
              width: 200px;
              height:200px;
               margin: 10px;
              border:1px solid blue;
               line-height: 200px;
              }
        span{
              display: inline-block;
              vertical-align: middle;
              line-height: 22px;
              }
    </style>
 
    <div>
        <span>測試文字測試文字</span>
    </div>
    <div>
        <span>測試文字 <br/> 測試文字<br/> 測試文字<br/> 測試文字<br/> 測試文字<br/> 測試文字</span>
    </div>

關(guān)鍵:
① 父元素(這里是div)設置和高度一致的 line-height (這里是200px)--- 由后面的vertical-align定義看,這是為了設置div的基線

② 子元素 (這里是span) 設置合適的line-height,并設置display:inline-block、vertical-align: middle; --- inline水平的元素無法設置line-height。所以這里要設置inline-block。

由 CSS vertical-align 屬性 的定義可知需要注意 :

vertical-align屬性應該設置到 行內(nèi)元素上(行內(nèi)塊元素也可)

方法二:

利用display:table-cell

    <style>
        *{padding: 0;margin:0;font-size: 12px;}
        div{display: table-cell;width: 200px;border:1px solid blue;vertical-align: middle;}
    </style>
 
    <div>
        <span>測試文字測試文字</span>
    </div>
    <div>
        測試文字測試文字
    </div>
    <div>
        <span>測試文字 <br/> 測試文字<br/> 測試文字<br/> 測試文字<br/> 測試文字<br/> 測試文字</span>
    </div>

優(yōu)點:等高布局,無需設置高度,文字輕松實現(xiàn)垂直居中,不用知道父盒子高度。而方法一中需要知道父盒子高度。


塊級

1.定位方法

子絕父相 子盒子top設為50%

1)定高

margin-top:元素高度一半的px( 注意??!寫精具體px 不要寫百分數(shù))或者transform:translateY(-50%)


2)不定高

transform:translateY(-50%) 即相對自身高度的一半


2.flexbox(定不定高都可)

水平居中

行內(nèi)元素

1)若父元素是塊級元素,直接給父元素設置text-align:center
2)父元素不是塊級元素,將父元素設成塊級元素,再設置text-align:center


image.png

塊級元素

一.(分寬度定不定)

定寬:
需要誰居中就設置誰的margin:0 auto
不定:
默認子元素寬度與父元素一樣,設子元素的display為:inline-block/inline 再給父元素設置text-align:center

二.定位

子絕父相 子元素:left:50%
定寬:
子元素:margin-left:-子元素寬度一半px或transform:translateX(-50%)
不定:
transform:translateX(-50%)

三.flexbox

父元素:display:flex;justfiy-content:center;

水平垂直居中

已知高和寬

子絕父相,定位實現(xiàn)
法一:top:0px;bottom:0px;left:0px;right:0px;margin:auto;
法二:子元素:left:50%;top:50%;margin-left:-寬一半px;margin-top:-高一半px;

未知高和寬

一.定位

left:50%;top:50%;translateX(-50%)translateY(-50%)

二.flex

父元素:display:flex;justfiy-content:center;align-items:center;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 14,194評論 1 92
  • 一 外部式css樣式 (也可稱為外聯(lián)式)就是把css代碼寫一個單獨的外部文件中,這個css樣式文件以“.css...
    KunMitnic閱讀 1,131評論 0 1
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標準。 注意:講述HT...
    kismetajun閱讀 28,880評論 1 45
  • 水平居中 子元素寬高已知: .parent{ position: relative; } .child{ posi...
    愛在幾米之瑤閱讀 382評論 0 0
  • 今天長沙下起了蒙蒙雨,等了 好久,公交還未到,突然腦海里浮現(xiàn)了另一個等公交的場景…… 這是大概十天前,在公交站等車...
    金融文藝小妖閱讀 398評論 0 0

友情鏈接更多精彩內(nèi)容