使用CSS完成元素居中的七种方法

在网页布局中元素水平居中比元素垂直居中要简单不少,同时实现水平居中和垂直居中往往是最难的。现在是响应式设计的时代,我们很难确切的知道元素的准确高度和宽度,所以一些方案不大适用。据我所知, 在CSS中至少有六种实现居中的方法。我将使用下面的HTML结构从简单到复杂开始讲解:

<div class="center">
  <img src="jimmy-choo-shoe.jpg" alt></div>

鞋子图片会改变,但是他们都会保持500pxX500px的大小。 HSL colors 用于使背景颜色保持一致。

 

使用text-align水平居中

有时显而易见的方案是最佳的选择:

div.center {
  text-align: center;
  background: hsl(0, 100%, 97%);}div.center img {
  width: 33%; height: auto;}

这种方案没有使图片垂直居中:你需要给<div> 添加 padding 或者给内容添加margin-top 和 margin-bottom使容器与内容之间有一定的距离。

使用 margin: auto 居中

这种方式实现水平居中和上面使用text-align的方法有相同局限性。

div.center {
  background: hsl(60, 100%, 97%);}div.center img {
  display: block;
  width: 33%;
  height: auto;
  margin: 0 auto;}

注意: 必须使用display: block使 margin: 0 auto对img元素生效。

 

使用table-cell居中

使用 display: table-cell, 而不是使用table标签; 可以实现水平居中和垂直居中,但是这种方法需要添加额外的元素作为外部容器。

<div class="center-aligned">
    <div class="center-core">
        <img src="jimmy-choo-shoe.jpg">
    </div></div>

CSS:

.center-aligned {
    display: table;
    background: hsl(120, 100%, 97%);
    width: 100%;}.center-core {
    display: table-cell;
    text-align: center;
    vertical-align: middle;}.center-core img {
    width: 33%;
    height: auto;}

注意:为了使div 不折叠必须加上 width: 100%,外部容器元素也需要加上一定高度使得内容垂直居中。给html和body设置高度后,也可以使元素在body垂直居中。此方法在IE8+浏览器上生效。

 

使用absolute定位居中

这种 方案 有非常好的跨浏览器支持。有一个缺点就是必须显式声明外部容器元素的height:

.absolute-aligned {
    position: relative;
    min-height: 500px;
    background: hsl(200, 100%, 97%);}.absolute-aligned img {
    width: 50%;
    min-width: 200px;
    height: auto;
    overflow: auto;
    margin: auto;
    position: absolute;
    top: 0; left: 0;
    bottom: 0; right: 0;}

使用translate居中

Chris Coiyer 提出了一个使用 CSS transforms 的新方案。 同样支持水平居中和垂直居中:

.center {
    background: hsl(180, 100%, 97%);
    position: relative;
    min-height: 500px;}.center img {
    position: absolute;
    top: 50%; left: 50%;
    transform: translate(-50%, -50%);
    width: 30%; height: auto;}

但是有以下几种缺点:

  • CSS transform 在部分就浏览器上需要使用 前缀
  • 不支持 IE9 以下的浏览器。
  • 外部容器需要设置height (或者用其他方式设置),因为不能获取 绝对定位 的内容的高度。
  • 如果内容包含文字,现在的浏览器合成技术会使文字模糊不清。

使用Flexbox居中

当新旧语法差异和浏览器前缀消失时,这种方法会成为主流的居中方案。

.center {
    background: hsl(240, 100%, 97%);
    display: flex;
    justify-content: center;
    align-items: center;}.center img {
    width: 30%; height: auto;}

在很多方面 flexbox 是一种简单的方案, 但是它有新旧两种语法以及早期版本的IE缺乏支持 (尽管可以使用 display: table-cell作为降级方案)。

现在规范已经最终确定,现代浏览器也大都支持。

使用calc居中

在某些情况下比flexbox更全面:

.center {
    background: hsl(300, 100%, 97%);
    min-height: 600px;
    position: relative;}.center img {
    width: 40%;
    height: auto;
    position: absolute;
    top: calc(50% - 20%);
    left: calc(50% - 20%);}

很简单,calc 允许你基于当前的页面布局计算尺寸。在上面的简单计算中, 50% 是容器元素的中心点,但是如果只设置50%会使图片的左上角对齐div的中心位置。 我们需要把图片向左和向上各移动图片宽高的一半。计算公式为:

top: calc(50% - (40% / 2));left: calc(50% - (40% / 2));

在现在的浏览其中你会发现,这种方法更适用于当内容的宽高为固定尺寸:

.center img {
    width: 500px; height: 500px;
    position: absolute;
    top: calc(50% - (300px / 2));
    left: calc(50% - (300px – 2)); }

我在 这篇文章 中详细讲解了calc。

这种方案和flex一样有许多相同的缺点: 虽然在现代浏览器中有良好的支持,但是在较早的版本中仍然需要浏览器前缀,并且不支持IE8。

.center img {
    width: 40%;       height: auto;
    position: absolute;
    top: calc(50% - 20%);
    left: calc(50% - 20%);}

当然还有 其他更多的方案。理解这六种方案之后,web开发人员在面对元素居中的时候会有更多的选择。

出自:http://www.zcfy.cc/article/439

时间: 2024-12-26 19:49:17

使用CSS完成元素居中的七种方法的相关文章

css中元素居中的几种方法

对于在网页端布局,垂直居中难于水平居中,同时实现水平和垂直居中是最难的.在移动端,因为设备的宽高是可变的,故一些方案很难实现.以下使用几种方案对下面的html去实现居中,如有不足,可以提出宝贵的意见: <div class="center"> <img src="1.jpg" alt> </div> 1. 使用text-align水平居中 这种方案只能使水平居中,要想垂直居中的话,要给div添加padding或给内容添加margi

CSS绝对定位元素居中的几种方法

CSS居中绝对定位元素的方法,有很多种,下面是我收集的几种 1,div宽度未知1 <body> <div style="position: absolute; left: 50%;"> <div style="position: relative; left: -50%; border: dotted red 1px;"> 没有宽度<br /> 照样居中,嘿嘿嘿 </div> </div> &l

元素居中的几种方法

元素居中的几种方法: ① 块级元素margin:0 auto; 针对嵌套的盒子元素,子元素在父元素中居中,只在水平方向上有效,浮动流排版中不可用 ② 内联元素text-align:center; 对块级元素设置此属性,使得盒子内的内联元素居中,一般包括文字/图片等 ③ 背景background-position:center top; 主要实现背景图片的居中 ④ 文字行内垂直居中 一行文字垂直居中:文字行高line-height的值与盒子的高度一致 多行文字垂直居中:文字内边距设置padding

div等块级元素居中的两种方法

以下两种方法是针对宽度确定的块级元素而言的 1.设置块级元素CSS属性为: margin: 0 auto: 即左右margin设置为auto. 2.设置块级元素的display为inline(此时要求块级元素包含内容,否则由于内联元素的高度设置不起作用,相当于高度为零,块级元素就无法被看到)或者inline-block. 该块状元素的父级元素CSS设置: text-align:center; 此时会将该块状元素看作text进行居中处理.

页面元素居中的几种方法

1前言 做页面布局时,经常会需要将一些页面元素居中显示.当然,你可以设定元素的top.left来使它居中,但是,当父容器的大小发生变化,你不得不修改子元素的top.left来使它保持居中:当用户的显示器分辨率与你的测试机不同,可能会导致界面乱成一片,所以不管从代码的易维护性的角度还是从对不同分辨率显示器的适应性方面来说,这种设置固定值的方法显然是比较拙劣的.因此,做页面布局,应尽量减少使用固定值的布局方式.下面介绍几种页元素居中的方法. 1Div居中 1.1左右居中 在父窗口中设置text-al

css中元素水平垂直居中4种方法介绍

table-cell轻松设置文本图片水平垂直居中 让一个元素垂直居中的思路:把这个元素的容器设置为table-cell,也就是具有表格单元格的特性,再使用vertical-align(这个属性对block元素不起作用,但对table-cell元素是有效的)设置元素垂直居中,即可达到我们想要的效果. IE7及以下版本不支持此方法,IE8及以上版本及大部分的主流浏览器都很好的支持. HTML代码  代码如下   <div class="img">    <img src=

元素居中的三种方法(包括垂直居中和水平居中)

第一种方案:分别设置垂直居中和水平居中 第二种方案:未知居中元素的尺寸的居中方案 第三种方案:已知所要居中元素尺寸的居中方案 当然图片的居中也差不多 1 <html> 2 <head> 3 <style> 4 .box2,.box3{ 5 float: left; 6 } 7 .box { 8 /*非IE的主流浏览器识别的垂直居中的方法*/ 9 display: table-cell; 10 vertical-align:middle; 11 /*设置水平居中*/ 12

css控制元素垂直居中的几种方法

一.单行文本垂直居中 HTML: <div id="parent"> <div id="child">Content here</div> </div> CSS: #child { line-height: 200px; } 二.垂直居中一张图片 HTML <div id="parent"> <img src="image.png" alt="&quo

使定位元素居中的4种方法例举

例子: 创建两个div,定位父级'box'  和   定位元素'sun'.本文要做的是 'sun' 要在 'box' 中居中显示, 该怎么做呢? 定位前效果图: 定位元素居中后的效果图: HTML代码: <!--定位元素父级--> <div id="box"> <!--定位元素--> <div id="sun"></div> </div> 样式代码: <style type="t