設置圖片元素上下垂直居中的7種css樣式_趙一鳴博客

設置圖片元素上下垂直居中的7種css樣式

閱讀(9548) @2018-07-15 14:13:34

圖片、文字左右居中很簡單,只需要以下代碼:

?

1

text-align:center;

?

文字上下居中也很簡單,假設外部div元素的高度是100px,那么:

?

1

line-height:100px;

?

line-height不適用于圖片,想要設置圖片上下居中對齊,代碼如下:

方法一:diaplay:table-cell

HTML部分:

?

1

<div>

?

?

2

????<img src="http://www.0351zhuangxiu.com/uploads/images/456.jpg" />

?

?

3

</div>

?

CSS部分:

?

1

div{

?

?

2

?????width:1000px;

?

?

3

?????height:1000px;

?

?

4

?????border:1px solid red;

?

?

5

?????text-align:center;

?

?

6

?????/*以下兩段css代碼就是設置圖片上下對齊*/

?

?

7

?????display:table-cell;

?

?

8

?????vertical-align:middle;

?

?

9

}

?

兼容性:由于display:table-cell的原因,IE6\7不兼容。

解釋一下:

一、display:table-cell屬性簡述:

display:table-cell屬性指讓標簽元素以表格單元格的形式呈現,類似于td標簽。目前IE8+以及其他現代瀏覽器都是支持此屬性的,但是IE6/7只能對你說sorry了,這一事實也是大大制約了display:table-cell屬性在實際項目中的應用。

我們都知道,單元格有一些比較特別的屬性,例如元素的垂直居中對齊,關聯伸縮等,所以display:table-cell還是有不少潛在的使用價值的,雖說IE6/7不支持此屬性,但是幸運的是,IE6/7一些亂糟糟的屬性與渲染,我們可以其他方法實現同樣或是類似的效果。

與其他一些display屬性類似,table-cell同樣會被其他一些CSS屬性破壞,例如float, position:absolute,所以,在使用display:table-cell與float:left或是position:absolute屬性盡量不用同用。設置了display:table-cell的元素對寬度高度敏感,對margin值無反應,響應padding屬性,基本上就是活脫脫的一個td標簽元素了。

一、大小不固定,多行文字的垂直居中:

1、單行文字

可能很多人都知道如何讓單行文字垂直居中顯示,就是使用line-height,將line-height值與外部標簽盒子的高度值設置成一致就可以了。

2、多行文字

如何實現父容器高度固定,文字可能一行,兩行或更多行的垂直居中對齊呢?

實現的關鍵是把文字當圖片處理。用一個span標簽將所有的文字封裝起來,設置文字與圖片相同的display屬性(inline-block屬性),然后用處理圖片垂直居中的方式處理文字的垂直居中即可。

外部div標簽css樣式設置如下:

?

01

div{

?

?

02

???width:550px;

?

?

03

???height:1.14em;

?

?

04

???padding:0 0.1em;

?

?

05

???border:4px solid #beceeb;

?

?

06

???color:#069; f

?

?

07

???font-size:10em;

?

?

08

???vertical-align:middle;

?

?

09

???display:table-cell;

?

?

10

}

?

內部span標簽css樣式設置如下:

?

1

span{

?

?

2

???display:inline-block;

?

?

3

???font-size:0.1em;

?

?

4

???vertical-align:middle;

?

?

5

}

?

下面這張是實例演示頁面的效果截圖:

方法二:position加margin

?

01

/**html**/

?

?

02

<div class="wrap">

?

?

03

????<div class="center"></div>

?

?

04

</div>

?

?

05

?

?

?

06

/**css**/

?

?

07

.wrap {

?

?

08

????width: 200px;

?

?

09

????height: 200px;

?

?

10

????background: yellow;

?

?

11

????position: relative;

?

?

12

}

?

?

13

.wrap .center {

?

?

14

????width: 100px;

?

?

15

????height: 100px;

?

?

16

????background: green;

?

?

17

????margin: auto;

?

?

18

????position: absolute;

?

?

19

????left: 0;

?

?

20

????right: 0;

?

?

21

????top: 0;

?

?

22

????bottom: 0;

?

?

23

}

?

兼容性:主流瀏覽器均支持,IE6不支持。

方法三:position加 transform

?

01

<!-- html -->

?

?

02

<div class="wrap">

?

?

03

????<div class="center"></div>

?

?

04

</div>

?

?

05

?

?

?

06

/* css */

?

?

07

.wrap {

?

?

08

????position: relative;

?

?

09

????background: yellow;

?

?

10

????width: 200px;

?

?

11

????height: 200px;

?

?

12

}

?

?

13

??

?

?

14

.center {

?

?

15

????position: absolute;

?

?

16

????background: green;

?

?

17

????top:50%;

?

?

18

????left:50%;

?

?

19

????-webkit-transform:translate(-50%,-50%);

?

?

20

????transform:translate(-50%,-50%);

?

?

21

????width: 100px;

?

?

22

????height: 100px;

?

?

23

}

?

兼容性:ie9以下不支持 transform,手機端表現的比較好。

方法四:flex;align-items: center;justify-content: center

?

01

<!-- html -->

?

?

02

<div class="wrap">

?

?

03

????<div class="center"></div>

?

?

04

</div>

?

?

05

?

?

?

06

/* css */

?

?

07

.wrap {

?

?

08

????background: yellow;

?

?

09

????width: 200px;

?

?

10

????height: 200px;

?

?

11

????display: flex;

?

?

12

????align-items: center;

?

?

13

????justify-content: center;

?

?

14

}

?

?

15

?

?

?

16

.center {

?

?

17

????background: green;

?

?

18

????width: 100px;

?

?

19

????height: 100px;

?

?

20

}

?

兼容性:移動端首選。

方法五:display:flex;margin:auto

?

01

<!-- html -->

?

?

02

<div class="wrap">

?

?

03

????<div class="center"></div>

?

?

04

</div>

?

?

05

?

?

?

06

/* css */

?

?

07

.wrap {

?

?

08

????background: yellow;

?

?

09

????width: 200px;

?

?

10

????height: 200px;

?

?

11

????display: flex;

?

?

12

}

?

?

13

?

?

?

14

.center {

?

?

15

????background: green;

?

?

16

????width: 100px;

?

?

17

????height: 100px;

?

?

18

????margin: auto;

?

?

19

}

?

兼容性:移動端首選。

方法六:純position

?

01

<!-- html -->

?

?

02

<div class="wrap">

?

?

03

????<div class="center"></div>

?

?

04

</div>

?

?

05

?

?

?

06

/* css */

?

?

07

.wrap {

?

?

08

????background: yellow;

?

?

09

????width: 200px;

?

?

10

????height: 200px;

?

?

11

????position: relative;

?

?

12

}

?

?

13

?

?

?

14

/**方法一**/

?

?

15

.center {

?

?

16

????background: green;

?

?

17

????position: absolute;

?

?

18

????width: 100px;

?

?

19

????height: 100px;

?

?

20

????left: 50px;

?

?

21

????top: 50px;

?

?

22

}

?

?

23

?

?

?

24

/**方法二**/

?

?

25

.center {

?

?

26

????background: green;

?

?

27

????position: absolute;

?

?

28

????width: 100px;

?

?

29

????height: 100px;

?

?

30

????left: 50%;

?

?

31

????top: 50%;

?

?

32

 margin-left:-50px;

?

?

33

 margin-top:-50px;

?

?

34

}

?

兼容性:適用于所有瀏覽器。

方法六中的方法一計算公式如下:

子元素(conter)的left值計算公式:left=(父元素的寬 - 子元素的寬 ) / 2=(200-100) / 2=50px;

子元素(conter)的top值計算公式:top=(父元素的高 - 子元素的高 ) / 2=(200-100) / 2=50px。

方法二計算公式:

left值固定為50%;

子元素的margin-left= -(子元素的寬/2)=-100/2= -50px;

top值也一樣,固定為50%,子元素的margin-top= -(子元素的高/2)=-100/2= -50px。

方法七:兼容低版本瀏覽器,不固定寬高

?

01

<!-- html -->

?

?

02

<div class="table">

?

?

03

????<div class="tableCell">

?

?

04

????????<div class="content">不固定寬高,自適應</div>

?

?

05

????</div>

?

?

06

</div>

?

?

07

?

?

?

08

/*css*/

?

?

09

.table {

?

?

10

????height: 200px;/*高度值不能少*/

?

?

11

????width: 200px;/*寬度值不能少*/

?

?

12

????display: table;

?

?

13

????position: relative;

?

?

14

????float:left;

?

?

15

????background: yellow;

?

?

16

}?????

?

?

17

?

?

?

18

.tableCell {

?

?

19

????display: table-cell;

?

?

20

????vertical-align: middle;

?

?

21

????text-align: center;???????

?

?

22

????*position: absolute;

?

?

23

????padding: 10px;

?

?

24

????*top: 50%;

?

?

25

????*left: 50%;

?

?

26

}

?

?

27

?

?

?

28

.content {

?

?

29

????*position:relative;

?

?

30

????*top: -50%;

?

?

31

????*left: -50%;

?

?

32

?????background: green;

?

?

33

}

?

暫時總結上面的七種,這種方法太多,其實只要習慣了其中的一兩種也就夠用了。

總結:在PC端,我習慣用方法一:display:table-cell。在移動端,方法六用的比較多。

實現水平垂直居中的css方法有很多,只要習慣用其中的一兩種即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248892.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248892.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248892.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

zap+日志分級分文件+按時間切割日志整合demo

實現功能 info debug 級別的日志輸出到 /path/log/demo.log ????warn error .... 級別的日志輸出到 /path/log/demo_error.log ????日志自動按小時分割 最多保留7天的日志 依賴的第三方包github地址 https://github.com/uber-go/zap https://github.com/lestrrat-go/fi…

day36 Pyhton 網絡編程03

一.內容回顧 socket通常也稱作"套接字"&#xff0c;用于描述IP地址和端口&#xff0c;是一個通信鏈的句柄&#xff0c;應用程序通常通過"套接字"向網絡發出請求或者應答網絡請求。 socket起源于Unix&#xff0c;而Unix/Linux基本哲學之一就是“一切皆文件”…

在webpack中使用eslint配置(詳細教程)-js教程-PHP中文網

本篇文章主要介紹了webpack引入eslint配置詳解&#xff0c;現在分享給大家&#xff0c;也給大家做個參考。 webpack中eslint使用 首先&#xff0c;要使webpack支持eslint&#xff0c;就要要安裝 eslint-loader &#xff0c;命令如下: 1 npm install --save-dev eslint-loader 在…

創建一個屬于自己的博客

1、安裝 node.js wget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.xz tar -xf node-v10.15.3-linux-x64.tar.xz -C /home/ 解壓到/home、目錄下 mv node-v10.15.3-linux-x64/ node vim /etc/profile #配置環境變量 export PATH/home/node/bin:$PATH export…

Redis是什么?

Redis is an open source, BSD licensed, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets. redis是開源,BSD許可,高級的key-value存儲系統. 可以用來存儲字符串,哈希結構…

Vue中定義全局變量與常量的各種方式詳解_vue.js_腳本之家

前言 本文主要跟大家介紹了關于Vue定義全局變量與常量的相關內容&#xff0c;分享出來供大家參考學習&#xff0c;下面話不多說了&#xff0c;來一起看看詳細的介紹&#xff1a; 我想要定義一個變量, 在項目的任何地方都可以訪問到, 不需要每一次使用的時候, 都引入. 嘗試1:…

oracle 數據庫 鎖

首先你要知道表鎖住了是不是正常鎖&#xff1f;因為任何DML語句都會對表加鎖。 你要先查一下是那個會話那個sql鎖住了表&#xff0c;有可能這是正常業務需求&#xff0c;不建議隨便KILL session&#xff0c;如果這個鎖表是正常業務你把session kill掉了會影響業務的。建議先查原…

推薦21個頂級的Vue UI庫! – TalkingData‘s Blog

推薦21個頂級的Vue UI庫&#xff01; 最近&#xff0c;隨著“星球大戰”&#xff08;指 GitHub 的 Star 數量大比拼&#xff09;的爆發&#xff0c;Vue.js 在 GitHub 上的 Star 數超過了 React。雖然 NPM 的下載量仍然落后于 React&#xff0c;但 Vue.js 的受歡迎程度似乎在持續…

后綴數組水題兩道

BZOJ1031:倍長&#xff0c;建sa&#xff0c;跑一邊把sa值小于等于長度的后綴第n個字母輸出BZOJ4278:直接把串合并起來建一個sa就可以了&#xff0c;然后直接分組貪心 轉載于:https://www.cnblogs.com/dream-maker-yk/p/10068915.html

js獲取頁面的各種高度與寬度

document.body.scrollTop等屬性可以獲取頁面滾動距離等&#xff0c;但是此類屬性在xhtml標準網頁或者更簡單的說是帶<!DOCTYPE ..>標簽的頁面里得到的結果是0&#xff0c; 所以一般為了兼容性都這樣寫 document.documentElement.scrollTop || document.body.scrollTop;以…

MAC終端下常用Git命令 - 某個人 - 博客園

送給新手的簡單命令操作、遠程Git和local的同步實現流程&#xff1a; 1、把git上的代碼clone到本地 $ git clone http:xxxx(地址&#xff0c;可以http也可以ssh) 2、clone到本地以后、使用branch -a 查看遠程所有分支 $ git branch -a 3、如若你有分支&#xff1a;master…

2019河北省大學生程序設計競賽(重現賽)B 題 -Icebound and Sequence ( 等比數列求和的快速冪取模)...

題目鏈接&#xff1a;https://ac.nowcoder.com/acm/contest/903/B 題意&#xff1a; 給你 q,n,p,求 q1q2...qn 的和 模 p。 思路&#xff1a;一開始不會做&#xff0c;后面查了下發現有個等比數列求和的快速冪公式&#xff0c;附上鏈接https://www.cnblogs.com/yuiffy/p/380917…

centos 升級curl版本

1、安裝repo rpm -Uvh http://www.city-fan.org/ftp/contrib/yum-repo/rhel6/x86_64/city-fan.org-release-2-1.rhel6.noarch.rpm 2、查看該 repo 包含的 curl 版本 yum.repos.d]# yum --showduplicates list curl --disablerepo"*" --enablerepo"city*"L…

nodejs服務后臺持續運行

forever.jpeg 我用本地mac連接阿里云服務器&#xff0c;啟動nodejs服務&#xff0c;客戶端掉線&#xff0c;服務也會終止。如何在客戶端掉線的情況下&#xff0c;node服務正常運行&#xff1f; forever介紹 forever是一個nodejs守護進程&#xff0c;完全由命令行操控。forev…

Java工具類DateFormatUtils詳解

日期和時間格式化實用程序和常量public static String format(Calendar calendar, String pattern) 說明&#xff1a;將日歷格式化為特定的模式&#xff1b;參數&#xff1a;calendar-格式化的日歷對象&#xff0c;非null&#xff1b;pattern-用于格式化日歷的模式,非null&…

Node.js+Koa開發微信公眾號個人筆記(一)準備工作 - ZhangCui - 博客園

本人也是在學習過程中&#xff0c;所以文章只作為學習筆記&#xff0c;如果能幫到你&#xff0c;那就更好啦~當然也難免會有錯誤&#xff0c;請不吝指出~ 一、準備工作 1、本人學習教程&#xff1a;慕課網Scott老師的《Node.js七天搞定微信公眾號》 &#xff0c;但是有點小貴…

bzoj4919 大根堆

考慮二分求序列LIS的過程。 g[i]表示長度為i的LIS最小以多少結尾。 對于每個數&#xff0c;二分尋找插入的位置來更新g數組。 放到樹上也是一樣&#xff0c;額外加上一個合并兒子的過程。 發現兒子與兒子直接是互不影響的&#xff0c;可以直接合并。 用啟發式合并set來維護這個…

Oracle rowid

SYS prod>select rowid from scott.emp;ROWID ------------------ AAASPXAAEAAAACVAAA AAASPXAAEAAAACVAAB AAASPXAAEAAAACVAAC AAASPXAAEAAAACVAAD AAASPXAAEAAAACVAAE ROWID的格式如下&#xff1a; 數據對象編號 文件編號 塊編號 行編號 AAASPX AAE AAAACV AAA 我們可以看…

vue項目配置eslint(附visio studio code配置)

eslint基礎環境搭建 全局安裝eslint&#xff1a;npm install eslint -g 項目eslint初始化&#xff1a;eslint --init&#xff0c;按團隊或自己的編程風格回答三道題。 ? How would you like to configure ESLint? Use a popular style guide ? Which style guide do you w…

從數據庫中取出數據表,導入并生成excel

RequestMapping("/numericalStatement1")public void createExcel(HttpServletResponse resp) throws Exception{try {String path "G:/test.xlsx";// 創建新的Excel 工作簿XSSFWorkbook workbook new XSSFWorkbook();// 在Excel工作簿中建一工作表&…