CSS实现水平居中的4种思路

×

目录

[1]text-align [2]margin [3]absolute [4]flex

前面的话

  水平居中是经常遇到的问题。看似方法较多,条条大路通罗马。但系统梳理下,其实都围绕着几个思路展开。本文将介绍关于水平居中的4种思路

思路一:在父元素中设置text-align:center实现行内元素水平居中

  将子元素的display设置为inline-block,使子元素变成行内元素

  [注意]若要兼容IE7-浏览器,可使用display:inline;zoom:1;来达到inline-block的效果

<style>
.parent{text-align: center;}
.child{display: inline-block;}
</style>
<div class="parent" style="background-color: gray;">
  <div class="child" style="background-color: lightblue;">DEMO</div>
</div>

思路二:在本身元素设置margin: 0 auto实现块级元素水平居中

【1】将子元素的display为table,使子元素成为块级元素,同时table还具有包裹性,宽度由内容撑开

  [注意]若要兼容IE7-浏览器,可把child的结构换成<table class="child">DEMO</table>

<style>
.child{
    display: table;
    margin: 0 auto;
}
</style>
<div class="parent" style="background-color: gray;">
  <div class="child" style="background-color: lightblue;">DEMO</div>
</div>

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

<style>
.parent{
  position: relative;
}
.child{
 position: absolute;
 left: 0;
 right: 0;
 margin: 0 auto;
 width: 50px;
}
</style>
<div class="parent" style="background-color: gray;height: 20px;">
    <div class="child" style="background-color: lightblue;">DEMO</div>
</div>

思路三: 通过绝对定位的偏移属性实现水平居中

【1】配合translate()位移函数

  translate函数的百分比是相对于自身宽度的,所以left:50%配合translateX(-50%)可实现居中效果

  [注意]IE9-浏览器不支持

<style>
.parent{
  position: relative;
}
.child{
  position: absolute;
  left: 50%;
  transform:translateX(-50%);
}
</style>
<div class="parent" style="background-color: gray;height: 20px;">
  <div class="child" style="background-color: lightblue;">DEMO</div>
</div>

【2】配合relative

  relative的偏移属性是相对于自身的,因为子元素已经被设置为absolute,所以若使用relative,则需要增加一层<div>结构,使其宽度与子元素宽度相同

  [注意]该方法全兼容,但是增加了html结构

<style>
.parent{
  position: relative;
}
.childWrap{
  position: absolute;
  left: 50%;
}
.child{
  position: relative;
  left: -50%;
}
</style>
<div class="parent" style="background-color: gray;height: 20px;">
  <div class="childWrap">
    <div class="child" style="background-color: lightblue;">DEMO</div>
  </div>
</div>

【3】配合负margin

  margin的百分比是相对于包含块的,所以需要增加一层<div>结构。由于宽度width的默认值是auto,当设置负margin时,width也会随着变大。所以此时需要定宽处理

  [注意]虽然全兼容,但需要增加页面结构及定宽处理,所以限制了应用场景

<style>
.parent{
  position: relative;
}
.childWrap{
  position: absolute;
  left: 50%;
}
.child{
  width:50px;
  margin-left:-50%;
}
</style>
<div class="parent" style="background-color: gray;height: 20px;">
  <div class="childWrap">
    <div class="child" style="background-color: lightblue;">DEMO</div>
  </div>
</div>

思路四: 使用弹性盒模型flex实现水平居中

  [注意]IE9-浏览器不支持

【1】在伸缩容器上设置主轴对齐方式jusify-content:center

<style>
.parent{
  display: flex;
  justify-content: center;
}
</style>
<div class="parent" style="background-color: gray;">
    <div class="child" style="background-color: lightblue;">DEMO</div>
</div>

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

<style>
.parent{display: flex;}
.child{margin: 0 auto;}
</style>
<div class="parent" style="background-color: gray;">
    <div class="child" style="background-color: lightblue;">DEMO</div>
</div>
时间: 2024-10-10 10:44:59

CSS实现水平居中的4种思路的相关文章

关于css垂直水平居中的几种方法

第一种, 针对内联元素居中. <div class="box box1"> <span class="test">垂直居中</span> </div> <style> .box{ width: 200px; height: 200px; border:1px solid red; } .box1{ display: table-cell; vertical-align: middle; text-align

CSS实现垂直对齐的4种思路

× 目录 [1]line-height [2]vertical-align [3]absolute [4]flex 前面的话 相对于水平居中,人们对于垂直居中略显为难,大部分原因是vertical-align不能正确使用.实际上,实现垂直居中也是围绕几个思路展开的.本文将介绍关于垂直居中的4种思路 思路一: 行高line-height实现单行文本垂直居中 行内流传着一种说法,单行文本垂直居中要将高度和行高设置成相同的值,但高度其实没必要设置.实际上,文本本身就在一行中居中显示.在不设置高度的情况

CSS实现水平垂直同时居中的5种思路

水平居中和垂直居中已经单独介绍过,本文将介绍水平垂直同时居中的5种思路 思路一: text-align + line-height实现单行文本水平垂直居中 <style> .test{ text-align: center; line-height: 100px; } </style> <div class="test" style="background-color: lightblue;width: 200px;">测试文字&

css实现垂直水平居中的5种方法

css实现垂直水平居中的5种方法 给父元素设置table-cell,text-align,vertical-align #big{ width: 200px; height: 200px; border:1px solid #000; display: table-cell; text-align: center; vertical-align: middle; } #small{ display: inline-block; width: 50px; height: 50px; backgro

css 两列自适应布局的4种思路

前面的话 前面已经介绍过css 两列布局中单列定宽单列自适应布局的6种思路的两列布局,而两列自适应布局是指一列由内容撑开,另一列撑满剩余宽度的布局方式.本文将从float.table.flex和grid来介绍两列自适应布局的4种思路 float [思路一]float 在单列定宽单列自适应的两列布局中,经常用float和负margin配合实现布局效果.但由于margin取值只能是固定值,所以在两列都是自适应的布局中就不再适用.而float和overflow配合可实现两列自适应效果.使用overfl

元素显示隐藏的9种思路

× 目录 [1]display [2]visibility [3]hidden[4]opacity[5]overflow[6]clip[7]transform[8]覆盖[9]偏移 前面的话 在网页制作中,元素的显示隐藏是非常常见的需求.本文将介绍元素显示隐藏的9种思路 思路一: display 对于元素显隐来说,最常见就是display:none | display:block,但是使用这种方法有个问题,元素的display属性在隐藏前并不都是block,还有可能是inline.inline-b

点击页面div弹窗以外隐藏的两种思路

在本文为大家介绍两种思路实现点击页面其它地方隐藏该div,第一种是对document的click事件绑定事件处理程序.. 第一种思路分两步 第一步:对document的click事件绑定事件处理程序,使其隐藏该div 第二步:对div的click事件绑定事件处理程序,阻止事件冒泡,防止其冒泡到document,而调用document的onclick方法隐藏了该div. <script type="text/javascript"> function stopPropagat

点击页面其它地方隐藏该div的两种思路

第一种思路分两步 第一步:对document的click事件绑定事件处理程序,使其隐藏该div 第二步:对div的click事件绑定事件处理程序,阻止事件冒泡,防止其冒泡到document,而调用document的onclick方法隐藏了该div. $(document).bind('click',function(){ $('#test').css('display','none'); }); $('#test').bind('click',function(e){ stopPropagati

margin优化的一种思路

写在前面的话: 原文链接:margin优化的一种思路 HTML <div id="main"> <div id="body1"> <div id="content1"></div> </div> <div id="body2"></div> </div> CSS(未优化) #main {margin:5px 0px 5px 0px;