淺談Css中的元素居中問題

来源:http://www.cnblogs.com/MarcoHan/archive/2016/03/09/5257992.html
-Advertisement-
Play Games

前言: 在寫CSS的時候讓元素在高度固定的容器中垂直居中是很簡單的,譬如設置容器的padding或者元素的margin之類的都可以做到;讓元素在容器中水平居中也有text-align:center、margin:0 auto;之類的屬性來幫我們達到目的,但是如何讓元素在不確定高度的容器中垂直居中或者


前言:

在寫CSS的時候讓元素在高度固定的容器中垂直居中是很簡單的,譬如設置容器的padding或者元素的margin之類的都可以做到;讓元素在容器中水平居中也有text-align:center、margin:0 auto;之類的屬性來幫我們達到目的,但是如何讓元素在不確定高度的容器中垂直居中或者行數不確定的文字在高度固定的容器垂直居中呢?下麵我們來討論幾種讓元素垂直居中的方法:

 

一、文字的垂直居中

1、單行文字

line-height與height高度相同,就可以讓單行文字垂直居中

XLC`Z{}XF@[@GM$2EQ7~Q_4.png

2、多行文字

我們可以把多行的文字當做圖片來處理,用span將文字封裝起來,並設置與圖片相同的display屬性(inline-block),然後用處理圖片垂直居中的方式讓多行文字垂直居中即可。

<div class="wrap">
    <span class="content">
        content<br>
        content
    </span>
</div>
 1 .wrap {
 2     width: 200px;
 3     height: 200px;
 4     line-height: 200px;
 5     background-color: #36AF77;
 6 }
 7 .content {
 8     display: inline-block;
 9     vertical-align: middle;
10     line-height: 15px;
11     font-size: 14px;
12 }

運行結果:

B]$YW[49W$F4{XJ{1TZ{9IM.png

 

二、圖片的垂直居中

1、通過vertical-align和line-height來實現垂直居中

<div class="wrap">
    <img src="E:/picture/me.jpg" alt="">
</div>
 1 .wrap {
 2     width: 200px;
 3     height: 200px;
 4     line-height: 200px;
 5     font-size: 0;
 6     background-color: #36AF77;
 7 }
 8 img {
 9     vertical-align: middle;
10 }

運行結果:

~ELQ6}Q2LBM(4)JTWO(MEAO.png

2、通過100%高度的span進行垂直居中

<div class="wrap">
    <img src="E:/picture/me.jpg" alt=""><span></span>
</div
 1 .wrap {
 2     width: 200px;
 3     height: 200px;
 4     background-color: #36AF77;
 5 }
 6 img {
 7     vertical-align: middle;
 8 }
 9 span {
10     display:inline-block;
11     height: 100%;
12     vertical-align: middle;
13 }

運行結果:

~ELQ6}Q2LBM(4)JTWO(MEAO.png

這裡的img與一個height:100% 的span同行,使這一行的行高撐滿div。

3、背景圖定位的方法

<div class="wrap">
</div>
1 .wrap {
2     width: 200px;
3     height: 200px;
4     background-color: #36AF77;
5     background-image: url("E:/picture/me.jpg");
6     background-position: center;
7     background-size: 60%;
8     background-repeat: no-repeat;
9 }

這裡將圖片作為容器的背景,通過background-position屬性讓它居中。

4、通過table-cell來實現垂直居中

<div class="wrap">
    <img src="E:/picture/me.jpg" alt="">
</div>
1 .wrap {
2     width: 200px;
3     height: 200px;
4     background-color: #36AF77;
5     display: table-cell;
6     font-size: 0;
7     vertical-align: middle;
8 }

運行結果:

 ~ELQ6}Q2LBM(4)JTWO(MEAO.png

W3C上對vertical-align的定義:vertical-align 屬性設置元素的垂直對齊方式。

該屬性定義行內元素的基線相對於該元素所在行的基線的垂直對齊。允許指定負長度值和百分比值。這會使元素降低而不是升高。

在表單元格中,這個屬性會設置單元格框中的單元格內容的對齊方式。

5、利用flex彈性佈局實現垂直居中

<div class="wrap">
    <img src="E:/picture/me.jpg" alt="">
</div>
 1 img {
 2     width: 88px;
 3     height: 88px;
 4 }
 5 .wrap {
 6     width: 200px;
 7     height: 200px;
 8     background-color: #36AF77;
 9     display: flex;
10     justify-content: center;
11     align-items: center;
12 }

運行結果:

B~~H_I6MGFO6XYNV~}GG(}9.png

可惜IE10之前的版本是不支持的,大家自行嘗試

6、利用after偽類

<div class="wrap">
    <img src="E:/picture/me.jpg" alt="">
</div>
 1 img {
 2     width: 88px;
 3     height: 88px;
 4 }
 5 .wrap {
 6     width: 200px;
 7     height: 200px;
 8     background-color: #36AF77;
 9 }
10 .wrap:after {
11     content: "";
12     display: inline-block;
13     height: 100%;
14     vertical-align: middle;
15 }
16 img {
17     vertical-align: middle;
18 }

運行結果:

~ELQ6}Q2LBM(4)JTWO(MEAO.png

這種方式和第二種類似,只是用after偽類生成的元素代替了span元素而已。

7、在已知圖片高度的情況下藉助額外的塊級元素

<div class="wrap">
    <div class="temp"></div>
    <img src="E:/picture/me.jpg" alt="">
</div
 1 img {
 2     width: 88px;
 3     height: 88px;
 4 }
 5 .wrap {
 6     width: 200px;
 7     height: 200px;
 8     background-color: #36AF77;
 9 }
10 .temp {
11     height: 50%;
12     margin-bottom: -44px;
13     opacity:0;
14 }

運行結果:

~ELQ6}Q2LBM(4)JTWO(MEAO.png

opacity:0  //透明不顯示但是占位

8、在已知圖片高度的情況下藉助margin-top負邊距

<div class="wrap">
    <img src="E:/picture/me.jpg" alt="">
</div>
 1 img {
 2     width: 88px;
 3     height: 88px;
 4 }
 5 .wrap {
 6     position: relative;
 7     width: 200px;
 8     height: 200px;
 9     background-color: #36AF77;
10 }
11 img {
12     position:absolute;
13     top: 50%;
14     left:0;
15     right:0;
16     margin:auto;
17     margin-top: -44px;
18 }

運行結果:

B~~H_I6MGFO6XYNV~}GG(}9.png

9、藉助絕對定位

<div class="wrap">
    <img src="E:/picture/me.jpg" alt="">
</div>
 1 .wrap {
 2     position: relative;
 3     width: 200px;
 4     height: 200px;
 5     background-color: #36AF77;
 6 }
 7 img {
 8     position:absolute;
 9     top:0;
10     bottom:0;
11     left:0;
12     right:0;
13     margin:auto;
14 }

運行結果:

B~~H_I6MGFO6XYNV~}GG(}9.png

10、主角最後登場----萬能的居中方式(絕對定位加transform)

<div class="wrap">
    <img class="center" src="E:/picture/me.jpg" alt="">
</div>
<div class="wrap">
    <img class="vertical-center" src="E:/picture/me.jpg" alt="">
</div>
<div class="wrap">
    <img class="horizon-center" src="E:/picture/me.jpg" alt="">
</div>
 1 .center {
 2     left: 50%;
 3     top: 50%;
 4     position: absolute;
 5     -webkit-transform: translate3D(-50%,-50%,0);
 6     -ms-transform: translate3D(-50%,-50%,0);
 7     -moz-transform: translate3D(-50%,-50%,0);
 8     -o-transform: translate3D(-50%,-50%,0);
 9     transform: translate3D(-50%,-50%,0);
10     z-index: 100;
11 }
12 .vertical-center {
13     top: 50%;
14     position: absolute;
15     -webkit-transform: translateY(-50%);
16     -ms-transform: translateY(-50%);
17     -moz-transform: translateY(-50%);
18     -o-transform: translateY(-50%);
19     transform: translateY(-50%);
20     z-index: 100;
21 }
22 .horizon-center {
23     left: 50%;
24     position: absolute;
25     -webkit-transform: translateX(-50%);
26     -ms-transform: translateX(-50%);
27     -moz-transform: translateX(-50%);
28     -o-transform: translateX(-50%);
29     transform: translateX(-50%);
30     z-index: 100;
31 }
32 .wrap {
33     position: relative;
34     width: 200px;
35     height: 200px;
36     margin-bottom: 10px;
37     background-color: #36AF77;
38 }

運行結果:

$8F6NOZX49~}}G75CI[Z@S0.png

通過絕對定位到50%的位置,再轉換自己高度寬度50%的負距離來實現居中顯示。

然而萬能的方法並不萬能,transform在IE9及其以下是不支持的,大家節哀。

 

關於水平居中文字可以用text-align:center,塊級元素可以用margin: 0 auto;之類的實現,比較簡單就不多說了。

簡單介紹了10種圖片的的居中方法,有沒有覺得有所感悟,媽媽再也不用擔心我不會元素居中了。

 

以上

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、網路編程中兩個主要的問題 一個是如何準確的定位網路上一臺或多台主機,另一個就是找到主機後如何可靠高效的進行數據傳輸。 在TCP/IP協議中IP層主要負責網路主機的定位,數據傳輸的路由,由IP地址可以唯一地確定Internet上的一臺主機。 而TCP層則提供面嚮應用的可靠(tcp)的或非可靠(UD
  • Mark一下,安裝rgdal後是不能使用gdal的功能的,比如如下代碼會報錯: sds <- get_subdatasets(hdfpath) 錯誤是 unable to find "gdal", 這時需要下載gdal核心文件並且安裝,下載網址如下: http://www.gisinternals.
  • 5-JEESZ分散式框架-CentOs下安裝Tomcat7(環境準備)
  • 首先什麼是shiro? shiro是apache下麵的一個開源項目,下麵是其網站上對其的一段說明: Apache Shiro is a powerful and easy-to-use Java security framework that performs authentication, aut
  • Dubbo是一個分散式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。簡單的說,dubbo就是個服務框架,如果沒有分散式的需求,其實是不需要用的,只有在分散式的時候,才有dubbo這樣的分散式服務框架的需求,並且本質上是個服務調用的東東,說白了就是個遠程服務調用的...
  • 首先在CentOs下下載jdk7解壓文件,tar包安裝(目前Oracle官方上,對於文件的下載,加了Cookie驗證機制,所以直接下載文件包,會出 現找不到的錯誤,最老土的辦法,本地下載,使用FTP上傳伺服器),我這邊已經下載好了,通過ssh已經上傳到指定的目錄,這裡直接講解安裝的過程。
  • 1 package com.shejimoshi.behavioral.State; 2 3 4 /** 5 * 功能:狀態介面 6 * 時間:2016年3月8日下午9:41:17 7 * 作者:cutter_point 8 */ 9 public interface State 10 { 11 /
  • 參考:https://www.qianduan.net/css3-animation/ 利用css3-animation來製作逐幀動畫 常見用法: animation:mymove 4s ease-out 1s backwards; @-webkit-keyframes mymove /*Safar
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...