源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
楼主: ttx9n

[CSS] CSS实现水平居中的4种思路简要概述

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2016-4-27 11:05:26 | 显示全部楼层 |阅读模式
水平居中是经常遇到的问题。看似方法较多,条条大路通罗马。但系统梳理下,其实都围绕着几个思路展开。本文将介绍关于水平居中的4种思路,感兴趣的朋友参考下吧

前面的话
 
  水平居中是经常遇到的问题。看似方法较多,条条大路通罗马。但系统梳理下,其实都围绕着几个思路展开。本文将介绍关于水平居中的4种思路,感兴趣的朋友参考下吧!
 
思路一:在父元素中设置text-align:center实现行内元素水平居中
 
  将子元素的display设置为inline-block,使子元素变成行内元素
 
  [注意]若要兼容IE7-浏览器,可使用display:inline;zoom:1;来达到inline-block的效果

CSS Code复制内容到剪贴板
  1. <style>   
  2. .parent{text-align: center;}       
  3. .child{display: inline-block;}   
  4. </style>    
  5. <div class="parent" style="background-color: gray;">   
  6.   <div class="child" style="background-color: lightblue;">DEMO</div>   
  7. </div>   

思路二:在本身元素设置margin: 0 auto实现块级元素水平居中
 
【1】将子元素的display为table,使子元素成为块级元素,同时table还具有包裹性,宽度由内容撑开
 
  [注意]若要兼容IE7-浏览器,可把child的结构换成<table class="child">DEMO</table>

CSS Code复制内容到剪贴板
  1. <style>   
  2. .child{   
  3.     display: table;   
  4.     margin: 0 auto;   
  5. }   
  6. </style>    
  7. <div class="parent" style="background-color: gray;">   
  8.   <div class="child" style="background-color: lightblue;">DEMO</div>   
  9. </div>   

【2】若子元素定宽,则可以使用绝对定位的盒模型属性,实现居中效果;若不设置宽度时,子元素被拉伸

CSS Code复制内容到剪贴板
  1. <style>   
  2. .parent{   
  3.   position: relative;   
  4. }   
  5. .child{   
  6.  position: absolute;   
  7.  left: 0;   
  8.  rightright: 0;   
  9.  margin: 0 auto;   
  10.  width: 50px;   
  11. }   
  12. </style>    
  13. <div class="parent" style="background-color: gray;height: 20px;">   
  14.     <div class="child" style="background-color: lightblue;">DEMO</div>      
  15. </div>   

思路三: 通过绝对定位的偏移属性实现水平居中
 
【1】配合translate()位移函数
 
  translate函数的百分比是相对于自身宽度的,所以left:50%配合translateX(-50%)可实现居中效果
 
  [注意]IE9-浏览器不支持

CSS Code复制内容到剪贴板
  1. <style>   
  2. .parent{   
  3.   position: relative;   
  4. }   
  5. .child{   
  6.   position: absolute;   
  7.   left: 50%;   
  8.   transform:translateX(-50%);   
  9. }   
  10. </style>    
  11. <div class="parent" style="background-color: gray;height: 20px;">   
  12.   <div class="child" style="background-color: lightblue;">DEMO</div>   
  13. </div>   

【2】配合relative
 
  relative的偏移属性是相对于自身的,因为子元素已经被设置为absolute,所以若使用relative,则需要增加一层<div>结构,使其宽度与子元素宽度相同
 
  [注意]该方法全兼容,但是增加了html结构

CSS Code复制内容到剪贴板
  1. <style>   
  2. .parent{   
  3.   position: relative;   
  4. }   
  5. .childWrap{   
  6.   position: absolute;   
  7.   left: 50%;   
  8. }   
  9. .child{   
  10.   position: relative;   
  11.   left: -50%;   
  12. }   
  13. </style>    
  14. <div class="parent" style="background-color: gray;height: 20px;">   
  15.   <div class="childWrap">   
  16.     <div class="child" style="background-color: lightblue;">DEMO</div>    
  17.   </div>      
  18. </div>   

【3】配合负margin
 
  margin的百分比是相对于包含块的,所以需要增加一层<div>结构。由于宽度width的默认值是auto,当设置负margin时,width也会随着变大。所以此时需要定宽处理
 
  [注意]虽然全兼容,但需要增加页面结构及定宽处理,所以限制了应用场景

CSS Code复制内容到剪贴板
  1. <style>   
  2. .parent{   
  3.   position: relative;   
  4. }   
  5. .childWrap{   
  6.   position: absolute;   
  7.   left: 50%;   
  8. }   
  9. .child{   
  10.   width:50px;   
  11.   margin-left:-50%;   
  12. }   
  13. </style>    
  14. <div class="parent" style="background-color: gray;height: 20px;">   
  15.   <div class="childWrap">   
  16.     <div class="child" style="background-color: lightblue;">DEMO</div>    
  17.   </div>      
  18. </div>   

思路四: 使用弹性盒模型flex实现水平居中
 
  [注意]IE9-浏览器不支持
 
【1】在伸缩容器上设置主轴对齐方式jusify-content:center

CSS Code复制内容到剪贴板
  1. <style>   
  2. .parent{   
  3.   display: flex;   
  4.   justify-content: center;   
  5. }   
  6. </style>    
  7. <div class="parent" style="background-color: gray;">   
  8.     <div class="child" style="background-color: lightblue;">DEMO</div>      
  9. </div>   

【2】在伸缩项目上设置margin: 0 auto

CSS Code复制内容到剪贴板
  1. <style>   
  2. .parent{display: flex;}   
  3. .child{margin: 0 auto;}   
  4. </style>    
  5. <div class="parent" style="background-color: gray;">   
  6.     <div class="child" style="background-color: lightblue;">DEMO</div>      
  7. </div>  


 

回复

使用道具 举报

2

主题

2万

回帖

146

积分

注册会员

Rank: 2

积分
146
发表于 2022-10-30 12:37:42 | 显示全部楼层
dfdsafdsfdsfdsf
回复 支持 反对

使用道具 举报

5

主题

2万

回帖

69

积分

注册会员

Rank: 2

积分
69
发表于 2022-11-10 08:44:46 | 显示全部楼层
好东西可以可以可以可以
回复 支持 反对

使用道具 举报

2

主题

2万

回帖

381

积分

中级会员

Rank: 3Rank: 3

积分
381
发表于 2023-9-11 22:42:13 | 显示全部楼层
的谁vdvdsvdsvdsdsv
回复 支持 反对

使用道具 举报

4

主题

1万

回帖

60

积分

注册会员

Rank: 2

积分
60
发表于 2024-3-12 21:16:46 | 显示全部楼层
dfdsafdsfdsfdsf
回复 支持 反对

使用道具 举报

12

主题

2万

回帖

431

积分

中级会员

Rank: 3Rank: 3

积分
431
发表于 2024-3-31 19:27:54 | 显示全部楼层
的谁vdvdsvdsvdsdsv
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2024-6-16 05:08:51 | 显示全部楼层
哦哦哦ijhhsdj
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2024-6-24 09:58:16 | 显示全部楼层
看看看看
回复 支持 反对

使用道具 举报

16

主题

2万

回帖

174

积分

注册会员

Rank: 2

积分
174
发表于 2024-7-13 04:24:50 | 显示全部楼层
额风风风微风微风违法
回复 支持 反对

使用道具 举报

9

主题

2万

回帖

420

积分

中级会员

Rank: 3Rank: 3

积分
420
发表于 2024-7-30 06:25:03 | 显示全部楼层
还不错啊
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

GMT+8, 2025-2-3 13:52 , Processed in 0.068118 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表