当前位置: 首页 > 面试题库 >

如何将元素水平和垂直居中

龚沛
2023-03-14
问题内容

我试图将标签内容垂直居中,但是当我添加CSS样式时display:inline-flex,水平文本对齐会消失。

如何为我的每个标签使文本对齐x和y?

* { box-sizing: border-box; }

#leftFrame {

  background-color: green;

  position: absolute;

  left: 0;

  right: 60%;

  top: 0;

  bottom: 0;

}

#leftFrame #tabs {

  background-color: red;

  position: absolute;

  top: 0;

  left: 0;

  right: 0;

  height: 25%;

}

#leftFrame #tabs div {

  border: 2px solid black;

  position: static;

  float: left;

  width: 50%;

  height: 100%;

  text-align: center;

  display: inline-flex;

  align-items: center;

}


<div id=leftFrame>

  <div id=tabs>

    <div>first</div>

    <div>second</div>

  </div>

</div>

问题答案:
  • 方法1- transform translateX/ translateY

在受支持的浏览器(大多数)中,可以将top: 50%/ left:50%与组合使用, translateX(-50%) translateY(-50%)动态垂直/水平居中元素。

.container {

    position: absolute;

    top: 50%;

    left: 50%;

    -moz-transform: translateX(-50%) translateY(-50%);

    -webkit-transform: translateX(-50%) translateY(-50%);

    transform: translateX(-50%) translateY(-50%);

}


<div class="container">

    <span>I'm vertically/horizontally centered!</span>

</div>
  • 方法2-Flexbox方法:

在支持的浏览器中,将display目标元素的设置为flexalign-items: center用于垂直居中和justify-content: center水平居中。只是不要忘记为其他浏览器支持添加供应商前缀。

html, body, .container {

    height: 100%;

}



.container {

    display: -webkit-flexbox;

    display: -ms-flexbox;

    display: -webkit-flex;

    display: flex;

    -webkit-flex-align: center;

    -ms-flex-align: center;

    -webkit-align-items: center;

    align-items: center;

    justify-content: center;

}


<div class="container">

  <span>I'm vertically/horizontally centered!</span>

</div>
  • 方法3- table-cell/ vertical-align: middle

在某些情况下,您需要确保html/ body元素的高度设置为100%

对于垂直对齐,将父元素的width/设置height100%并添加display:table。然后对于子元素,将更display改为table-cell并添加vertical-align: middle

对于水平居中,您可以添加text-align: center以使文本和任何其他inline子元素居中。另外,您可以使用margin: 0auto,假设元素是block水平的。

html, body {

    height: 100%;

}

.parent {

    width: 100%;

    height: 100%;

    display: table;

    text-align: center;

}

.parent > .child {

    display: table-cell;

    vertical-align: middle;

}


<section class="parent">

    <div class="child">I'm vertically/horizontally centered!</div>

</section>
  • 方法4-绝对50%从顶部移置:

此方法假定文本的高度已知-在这种情况下为18px50%相对于父元素,仅从顶部绝对定位该元素。使用负值margin- top,该负值是元素已知高度的一半,在这种情况下为- -9px

html, body, .container {

    height: 100%;

}



.container {

    position: relative;

    text-align: center;

}



.container > p {

    position: absolute;

    top: 50%;

    left: 0;

    right: 0;

    margin-top: -9px;

}


<div class="container">

    <p>I'm vertically/horizontally centered!</p>

</div>
  • 方法5- line-height方法(最不灵活-不建议):

在某些情况下,父元素将具有固定的高度。对于垂直居中,您要做的就是line-height在子元素上设置一个值,该值等于父元素的固定高度。

尽管此解决方案在某些情况下可以使用,但值得注意的是,当有多行文本(例如this)时,该解决方案将无法使用。

.parent {

    height: 200px;

    width: 400px;

    background: lightgray;

    text-align: center;

}



.parent > .child {

    line-height: 200px;

}


<div class="parent">

    <span class="child">I'm vertically/horizontally centered!</span>

</div>


 类似资料:
  • 我正在尝试垂直居中我的选项卡内容,但是当我添加CSS样式时,水平文本对齐消失了。 我如何使文本对齐x和y为我的每个选项卡? null null

  • 问题内容: 有什么办法可以将html元素垂直或水平居中放置在主要父对象中? 问题答案: 更新 :虽然这个答案早在2013年初就可能是正确的,但现在不应该再使用。正确的解决方案使用offsets。 至于其他用户的建议,也可以使用本机引导程序类,例如:

  • 问题内容: 有没有办法在 垂直和水平方向上输入一个DIV, 但这很重要, 当窗口小于内容时,内容将不会被剪切 。div必须具有背景色,宽度和高度。 我总是将div的中心定位为绝对位置和负边距,如提供的示例所示。但是它有一个问题,那就是削减内容的顶部。有没有一种方法可以将div.content居中而不会出现此问题? CSS: HTML: 我的问题不是重复的“如何在水平和垂直方向上居中放置元素?”1-

  • 有没有办法将html元素垂直或水平地集中在主父元素中?

  • 问题内容: 如何使用flexbox在容器内水平和垂直居中div。在下面的示例中,我希望每个数字都彼此相邻(按行),并水平居中。 问题答案: 我认为您想要以下内容。 你的元素应该是块级(而非)如果你想要的高度和顶部/底部填充,以正常工作。 另外,在上,将宽度设置为而不是。 您的属性很好。 如果您希望垂直居中于视口中,请为和分配100%的高度,然后将页边距清零。 请注意,需要一个高度才能看到垂直对齐效

  • 如何使用FlexBox在容器内水平和垂直地居中div。在下面的例子中,我希望每一个数字在彼此下面(在行中),水平居中。 null null http://codepen.io/anon/pen/zlxbo