CSS各種居中方法

1. 水平居中

1.1 行內元素

text-align: center;

1.2 塊級元素

margin: 0 auto;

這兩種方法都是用來水平居中的,前者是針對父元素進行設置而后者則是對子元素
他們起作用的首要條件是子元素必須沒有被float影響,否則一切都是無用功。

1.3 多于一個塊級元素:

1.3.1 子元素設置為inline-block類型,同時父元素設置屬性text-align: center;

.inline-block-center {
  text-align: center;
}
.inline-block-center div {
  display: inline-block;
  text-align: left;
}

1.3.2 使用flex box

// 父元素
flex-center {
  display: flex;
  justify-content: center;
}

2.垂直居中

2.1 行內元素

2.1.1 單行行內元素

可以設置padding-toppadding-bottom
如果無法使用padding屬性,則將heightline-height設為相等也可以垂直居中。

2.1.2 多行行內元素

1)、可以將元素轉為table樣式,再設置vertical-align:middle;

.center-table {
  display: table;
  height: 250px;
  background: white;
  width: 240px;
  margin: 20px;
}
.center-table p {
  display: table-cell;
  margin: 0;
  background: black;
  color: white;
  padding: 20px;
  border: 10px solid white;
  vertical-align: middle;
}

2)、使用flex布局

.flex-center-vertically {
  display: flex;
  justify-content: center;
  flex-direction: column;
  height: 400px;
}

這里要注意!!flex布局要求父元素必須顯示設置height
3)、在容器中放置偽元素
使用vertical-align使文本垂直對齊該偽元素。

<div class="ghost-center">
  <p>I'm vertically centered multiple lines of text in a container. Centered with a ghost pseudo element</p>
</div>
.ghost-center {
  position: relative;
}
.ghost-center::before {
  content: " ";
  display: inline-block;
  height: 100%;
  width: 1%;
  vertical-align: middle;
}

2.2 塊級元素

2.2.1 已知高度
.parent {
  position: relative;
}
.child {
  position: absolute;
  top: 50%;
  height: 100px;
  margin-top: -50px; 
/* account for padding and border if not using box-sizing: border-box; */
}
2.2.2 元素是未知高度

1)、

.parent {
position: relative;
}
.child {
position: absolute;
top: 50%;
transform: translateY(-50%);
}

2)、flex布局

.parent {
  display: flex;
  flex-direction: column;
  justify-content: center;
}

3. 垂直和水平居中

3.1 固定大小元素

.parent {
 position: relative;
}

.child {
  width: 300px;
  height: 100px;
  padding: 20px;
  position: absolute;
  top: 50%;
  left: 50%;
  margin: -70px 0 0 -170px;
}

首先給父元素寫上positon:relative,這么做是為了給子元素打上position:absolute的時候不會被定位到外太空去。接下去,寫上子元素的heightwidth,這個似乎是必須的,某些瀏覽器在解析的時候如果沒有這2個值的話會出現意想不到的錯位。接著就是整個方法的核心,給子元素再打上top:50%;left:50%以及margin-top:一半的height值的的負數;margin-left:一半的width值的負數。整理一下之后,可能你會給你的子元素寫上這樣的css(當然,父元素也要先寫上widthheight

3.2 未知大小元素

如果當前元素大小未知,可以使用translate將元素在x和y兩個方向反向偏移自身的50%的大小,使其居中顯示

.parent {
  position: relative;
}
.child {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

3.3 使用flex居中

.parent {
  display: flex;
  justify-content: center;
  align-items: center;
}

3.4 grid居中

body, html {
  height: 100%;
  display: grid;
}
span { /* thing to center */
  margin: auto;
}

參考:Centering in CSS: A Complete Guide

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,805評論 1 92
  • CSS中的居中可分為水平居中和垂直居中。水平居中分為行內元素居中和塊狀元素居中兩種情況,而塊狀元素又分為定寬塊狀元...
    何wife閱讀 668評論 0 0
  • H5移動端知識點總結 閱讀目錄 移動開發基本知識點 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇閱讀 4,625評論 0 26
  • 移動開發基本知識點 一.使用rem作為單位 html { font-size: 100px; } @media(m...
    橫沖直撞666閱讀 3,514評論 0 6
  • 大結局了,最后的畫面是,這兩個斗了一輩子,恨了一輩子,也彼此牽掛了一輩子的女人心平氣和的坐在一個風景奇好的露天咖啡...
    coffee漫閱讀 1,297評論 1 4