如何使用CSS实现居中

前言:

这一篇主要是翻译 《how-to-center-anything-with-css》这一篇文章的主要内容,再加上自己的一些概括理解;主要问题是解决垂直居中的问题。我们知道实现水平居中的方式很多种,比如:

text-align:center;
margin:0 auto;

等等都可以实现最基本的水平居中,但是对于垂直居中好像就不是很熟悉了,我们先来看看这篇译文讲的是什么,顺便穿插一些其他总结的居中方法于其中。

 

最近,我们深入探讨了CSS布局背后的核心概念,并探讨了绝对和相对定位之间的差异。 我们将使用另一个CSS布局谈话,这一次基于一个根本问题,几乎每个新的开发人员问:你如何实现居中?

有一堆不同类型的web元素和布局情况,每个都需要一个独特的解决方案来定中心(垂直和水平)。 今天,我们将讨论一系列这些场景,这样你就可以围绕他们的工作原理,带满信心去实现一切居中问题!

这个是为了什么?

我最近得到了许多挣扎于CSS的布局的基本方法和概念的设计者的评论反馈。 许多刚接触CSS的设计者普遍的共识是,他们只是拨弄代码,直到一切符合他们所需要的效果。

我自己也经历过这段时期,我知道这是你的专业成长过程中一个非常令人沮丧的时期。 知道答案是正确的在你面前,没有能够弄清楚是令人讨厌和耗时。

如果这听起来很熟悉,希望我可以帮助缓解你在这个时期有一些坚实和实用的建议,如何处理一些常见的布局场景。 如果你是一个熟练CSS甚至于可以随手闭上眼睛都可以编写适合CSS代码的高手,那么这篇文章可能不适合你。 如果你是一个设计师,只是想更好地了解如何把你的Photoshop文件中的什么,把它变成CSS,那么这篇文章很适合你。 让我们开始吧。

使一个元素水平居中

第一个场景是最常见的一个场景:

在视口或浏览器窗口中水平放置元素。 要开始,让我们突破一个简单的div,并给它一些基本的样式。

        

 方案一

我们需要做的是利用可以应用于margin 的“auto ”值。

     

缺点:

必须记在脑里的一些事情

  首先,你必须为你居中的元素声明一个特定的宽度。 高度声明不是必需的,您可以允许内容根据需要确定高度,这是默认设置,但必须始终设置宽度

重要的是要注意,虽然这个技巧将适用于大多数块级元素,而不仅仅是div,它不会帮助你实现垂直居中。

方案二

使一个绝对定位的元素居中

上面的方法可以自动将一个项目集中在另一个项目中,但是该方法假设您使用默认定位上下文:static。 如果应用了绝对定位,此方法将退出窗口。

使用我们上周学习的绝对和相对定位方法,我们可以应用一个简单的公式来解决这个问题。

    

 1 .container {
 2   height: 300px;
 3   width: 300px;
 4   background: #eee;
 5   margin: 10px auto;
 6   position: relative;
 7 }
 8
 9 .box {
10   height: 100px;
11   width: 100px;
12   background: #222;
13   position: absolute;
14   left: 100px;
15 }

使用这段代码,我们将盒子的左边和父容器的边缘之间的距离设置为(300-100)/2=100px,实现 子元素的水平居中

缺点:

  这种方法仅在父容器具有静态宽度时有效。 必须事先声明父元素和子元素的宽度,对于流式布局,响应式宽度不起作用

方案三

  考虑到响应式设计的普及,越来越多的容器最近流行的路线。 这意味着,我们需要另一种方法来使孩子居中,而不依赖于父节点的宽度。

  为了实现这一点,我们需要使用左值的百分比。 显而易见的答案是使用50%,但是这不会真正工作,因为你不是占位元素的宽度。 为了使它工作,我们需要添加一个 负的 margin-left  的子元素的宽度的一半。

 1 .container {
 2   height: 300px;
 3   width: 70%;
 4   background: #eee;
 5   margin: 10px auto;
 6   position: relative;
 7 }
 8
 9 .box {
10   height: 100px;
11   width: 100px;
12   background: #222;
13   position: absolute;
14
15   /*Centering Method 2*/
16   margin: 0px 0 0 -50px;
17   left: 50%;
18 }

重要的是要注意,如果我们的孩子元素有流体宽度,这也将工作。 我们使用与以前相同的步骤,并提出类似以下内容:

 1 .container {
 2   height: 300px;
 3   width: 70%;
 4   background: #eee;
 5   margin: 10px auto;
 6   position: relative;
 7 }
 8
 9 .box {
10   height: 100px;
11   width: 70%;
12   background: #222;
13   position: absolute;
14
15   /*Centering Method 2*/
16   margin: 0px 0 0 -35%; /* Half of 70% /*
17   left: 50%;
18 }

【注:因为margin的百分比 和子元素的宽度百分比都是根据父元素的宽度来决定的】

使一个元素完全居中

现在我们已经有了几个简单而复杂的居中方法,现在是时候处理元素水平和垂直的完全居中问题了

幸运的是,要解决这个问题,我们可以使用我们刚才学到的方法,我们只需要考虑高度。 这一次,我们也将垂直和水平地同时居中父元素和子元素。

方案一:

借鉴绝对定位的水平居中方法,如法炮制,我们可以利用top值实现垂直居中

.container {
  height: 300px;
  width: 300px;
  background: #eee;
  position: absolute;

  margin: -150px 0 0 -150px;
  left: 50%;
  top: 50%;
}

.box {
  height: 100px;
  width: 100px;
  background: #222;
  position: absolute;

  /*Centering Method 2*/
  margin: -50px 0 0 -50px;
  left: 50%;
  top: 50%;
}

方案二  利用flex布局

  1. align-items  实现垂直居中
  2. justify-content  实现水平居中

.box{
   width:300px;
   height:400px;
   border:1px solid pink;
   display:flex;
   align-items:center;
   justify-content:center;
 }

方案三 使用transform实现

代替使用负的 margin值, 我们可以使用负的 translate() transforms属性,这种方式可以不需要事先声明子元素的宽度和高度

.container {
  position:relative;
  height: 200px;
  width: 400px;
  background: #eee;
  margin: 150px auto;
}
.center {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 40%;
  height: 40%;
  background:red;
}

使文字居中

对于我的下一个技巧,我会教你一些关于文本的居中方法。 我们将从容器div中的一个简单的h1元素开始

      

                   

方案一

使用 text-align 属性

 1 .container {
 2   height: 400px;
 3   width: 400px;
 4   background: #eee;
 5   margin: 50px auto;
 6 }
 7
 8 h1 {
 9   font: 40px/1 Helvetica, sans-serif;
10   text-align: center;
11 }

容易吗? 但现在让我们说,我们要垂直居中这行文本。 如果这是一个段落,我们可能会考虑上面的方法,但由于它只有一行,我们可以使用一个漂亮的把戏。

我们所要做的就是将line-height属性设置为容器的高度。 我使用缩写字体语法完成了以下。

.container {
  height: 200px; /*Set line-height to this value*/
  width: 400px;
  background: #eee;
  margin: 150px auto;
}

h1 {
  font: 40px/200px Helvetica, sans-serif;
  text-align: center;
}

效果图

缺点:

只对于单行文字起作用

关于文字的问题,还可以参考这篇博文 《CSS如何实现“一行水平居中,而两行就左对齐

     

时间: 2024-10-11 03:23:53

如何使用CSS实现居中的相关文章

CSS元素居中

html中元素分为行内元素和块级元素.采用margin或者float来使元素居中,是比较常见的方法. margin:0 auto只能用于块级元素,不能使行内元素居中. 参考知乎上为什么「margin:auto」可以让块级元素水平居中?,margin:0 auto,是左右外边距自适应,水平方向的 auto,其计算值取决于可用空间(剩余空间).元素本身为块级元素,那么水平方向可用空间的距离为其包含盒的宽度(宽度=盒总宽度-(padding-left+padding-right+border-left

利用CSS实现居中对齐

1. 文本居中 首先编写一个简单的html代码,设置一个类名为parentDiv的div对象.html代码如下: 1 <div class="parentDiv"> 2 这里随意填写~... 3 </div> 1.1 实现文字水平居中(使用text-align) 对div.parentDiv设置text-align: center;来实现.CSS代码如下: 1 [css] 2 3 .parentDiv { 4 width:200px; 5 height:100p

css图片居中(水平居中和垂直居中)

http://www.51xuediannao.com/html+css/htmlcssjq/css_img_center.html css图片居中分css图片水平居中和垂直居中两种情况,有时候还需要图片同时水平垂直居中,下面分几种居中情况分别介绍 css图片居中分css图片水平居中和垂直居中两种情况,有时候还需要图片同时水平垂直居中,下面分几种居中情况分别介绍. css图片水平居中 利用margin: 0 auto实现图片水平居中 利用margin: 0 auto实现图片居中就是在图片上加上c

使用Flexbox实现CSS竖向居中

竖向居中需要一个父元素和一个子元素合作完成. <div class="flexbox-container"> <div>Blah blah</div> <div>Blah blah blah blah blah ...</div> </div> …但为了让子元素竖向居中,你只需要对父元素施加CSS样式: .flexbox-container { display: -ms-flexbox; display: -web

DIV CSS固定宽度居中实例

DIV CSS固定宽度居中布局实例 在布局一个网页时,非常重要的是一般网页主体布局都是水平居中的,其实就是对最外的DIV层设置居中布局,这时布局居中就是我们这里要介绍关键点. DIV布局水平居中,关键使用CSS单词为margin:0 auto.解释:DIV对象外边距左右为自动适应距离(根据对象设置宽度样式自动判断浏览器除去设置宽度后剩下宽度左右自动对等自然就实现布局居中),上下间距为0px. 关键实例CSS代码: body{ text-align:center} .box{ margin:0 a

css完全居中

关于css完全居中的文章,网上已经很多了.这里主要记录一下思路,方便记忆,最后附上所有的参考链接. 1  水平居中 1  内部是内联元素,那么我们直接可以在父元素上面设置,text-align:center. 2 有多个内联元素,排成一排,实现水平居中. html代码: <div class="container"> <div>1</div> <div>2</div> <div>3</div> <

css元素居中实现方法

关于css元素居中,查阅资料和实验有以下几种方法: 水平居中 1.最简单的在父元素中加入 text-align:center .这条语句不用关心子元素是否有固定的尺寸大小. 但只能对图片,按钮,文字等行内元素(display为inline或inline-block等)进行水平居中. 但要说明的是在IE6.7这两个奇葩的浏览器中,它是能对任何元素进行水平居中的. 2.子元素宽度确定,可以使用 margin:0 auto 或者 margin-left:auto ; margin-right:auto

css 元素居中方法

目前知道有两种方法 方法一:主要适用于元素未设定高度的情况下. 直接上代码 html: 1 <div class="nav-content"> 2 <ul ng-click="navItem($event)" ng-model="navType"> 3 <li id="nav_msglist"> 4 <a href="#/">消息列表</a> 5

css绝对定位居中

技术参考:https://www.php.cn/css-tutorial-409962.html 1.兼容性不错的主流css绝对定位居中的用法: 1 .conter{ 2 width: 600px; height: 400px; 3 position: absolute; left: 50%; top: 50%; 4 margin-top: -200px; /* 高度的一半 */ 5 margin-left: -300px; /* 宽度的一半 */ 6 } 注意:这种方法有一个很明显的不足,就是

css实现居中的五中方法

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>css实现的五种居中的方法</title> <style> .inner { height: 300px; width: 1200px; position: absolute;// top: 50%;// left: 50%;// transfo