css 元素居中

一:水平居中

一、行內元素水平居中

在父元素上設置 text-align: center 使文字/圖片水平居中。css

.container {
  text-align: center;
}

二、塊級元素水平居中

  • 先給塊級元素設置寬度(不設置寬度,塊級元素本身佔據一整行,何談居中)
  • 再給塊級元素設置margin:0 auto;(當上下margin不必定是0,能夠按照需求來設置)
.container {
  width: 200px;
  margin:  0 auto;
}

2、垂直居中

一、塊級元素內部垂直居中

原理:設置塊級元素上下padding相等html

前提:沒有設置高度,高度由內容撐開。塊級元素若是設置了高度,就不知道如何設置padding的數值
democss3

<style>
.ct{
  padding: 40px 0;
  text-align: center;
  background: #eee;
}
</style>
 <div class="ct">
    <p>好好學習</p>
    <p>每天向上</p>
  </div>

執行結果
clipboard.png佈局

二、絕對定位實現垂直居中

(1)demo
使用前提是塊級元素的寬高固定學習

<div class="dialog">
    <div class="header">我是標題</div>
    <div class="content">我是內容</div>
  </div>
<style>
html,body {
  height: 100%;
}


.dialog {
  position: absolute;
  left: 50%; //使用絕對定位,讓dialog起點偏移到頁面的中央
  top: 50%;
  margin-left: -200px;//經過負margin,偏移dialog寬高的一半,讓dialog處於正中
  margin-top: -150px;
  
  width: 400px;
  height: 300px;
  box-shadow: 0px 0px 3px #000;
}

.dialog .header{
  padding: 10px;
  background: #000;
  color: #fff;
}
.dialog .content{
  padding: 10px;
}
</style>

(2)解析:
使用絕對定位 position: absolute,讓dialog起點偏移到頁面的中央flex

clipboard.png
經過負margin,偏移dialog寬高的一半,讓dialog處於正中。不用relative的緣由是已經用了絕對定位了,因此只好用負margin。結果如圖spa

clipboard.png

(3)塊級元素的寬高不固定,就不能用負margin了(margin使用百分比是相對於父元素的寬度)。咱們能夠用css3的一個transform的屬性,transform是相對自身的寬高來作偏移的。3d

clipboard.png

三、vertical-align實現水平垂直居中

原理:code

  • 經過text-align:center 實現水平居中
  • 經過僞元素設置一個內容爲空的元素,設置高度爲100%,經過vertical-align實現基線對齊。

使用環境:塊級元素中設置行內元素水平垂直居中
代碼:demo
結果:orm

clipboard.png
遇坑:一、固然使用絕對定位也能夠實現這個效果

二、僞元素設置display:block是有問題,須要設置爲inline-block

clipboard.png

三、使用僞元素是爲了減小標籤

clipboard.png

四、table-cell實現居中

原理:把box設置爲表格元素(display: table-cell),經過vertical-align: middle對裏面的元素作垂直居中
缺點:把box設置爲display: table-cell,box再也不是塊級元素,若是不設置寬度就會收縮。

clipboard.png
代碼:demo
結果:

clipboard.png

五、display: flex實現

代碼:demo

<div class="space">
  <div class="earth"></div>
</div>
.space {
  width: 100vw;
  height: 100vh;  /* 設置寬高以顯示居中效果 */
  display: flex;  /* 彈性佈局 */
  align-items: center;  /* 垂直居中 */
  justify-content: center;  /* 水平居中 */
}

body {
  margin: 0;
  background: rgba(0, 0, 0, .95);
}

.earth::after {
  content: '🌏';
  font-size: 85px;
}
相關文章
相關標籤/搜索