【问题标题】:CSS Vertical Centering using Absolute Center or Flexbox or Translate not working使用 Absolute Center 或 Flexbox 或 Translate 的 CSS 垂直居中不起作用
【发布时间】:2017-01-07 07:54:11
【问题描述】:

我知道这个问题已经被问了一遍又一遍。 我正在尝试使用 CSS 将文本容器垂直居中,但没有任何效果。是因为流动的负边距布局吗?我哪里错了?

文本容器 c-service__body 处于最大化视图(代码 sn-p)从未完全居中。

非常感谢。

  1. 使用 Absolute 和 bot, left, top, right:0 方法:(桌面:底部空间)

img {
  max-width: 100%;
  font-style: italic;
  vertical-align: middle;
}

.c-block__item:nth-of-type(1) {
  width: 50%;
  float: left;
}
.c-block__item:nth-of-type(2) {
  width: 45.83333%;
  float: left;
  margin-left: 4.16667%;
}

.c-block__item {
  position: relative;
}

.c-block__body {
  margin: auto;
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
}
<div class="c-block">
  <div class="c-block__item">
    <img src="http://lorempixel.com/g/700/414/">
  </div>
  <div class="c-block__item">
    <div class="c-block__body">
      <h2>asdasdasd</h2>
      <p>lorem bababakbakabkabakbaka asdasdadasd sadasdasdasd asdasdasd asd asdasdasdasd asd asdasdasdasdasd
      </p>
      <p>asdasdasdasd aösdköalskdölaksdölkasödlk asdasdasdölmölm
        asdasdasdasdasdasdölkölkölk
      </p>
    </div>
  </div>
</div>
  1. 使用 translate 方法:(桌面:标题跳到无穷大)

img {
  max-width: 100%;
  font-style: italic;
  vertical-align: middle;
}

.c-block__item:nth-of-type(1) {
  width: 50%;
  float: left;
}
.c-block__item:nth-of-type(2) {
  width: 45.83333%;
  float: left;
  margin-left: 4.16667%;
}

.c-block__item {
  position: relative;
}

.c-block__body {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
<div class="c-block">
  <div class="c-block__item">
    <img src="http://lorempixel.com/g/700/414/">
  </div>
  <div class="c-block__item">
    <div class="c-block__body">
      <h2>asdasdasd</h2>
      <p>lorem bababakbakabkabakbaka asdasdadasd sadasdasdasd asdasdasd asd asdasdasdasd asd asdasdasdasdasd
      </p>
      <p>asdasdasdasd aösdköalskdölaksdölkasödlk asdasdasdölmölm
        asdasdasdasdasdasdölkölkölk
      </p>
    </div>
  </div>
</div>
  1. 使用 Flexbox(桌面全屏:底部有更多空间)

img {
  max-width: 100%;
  font-style: italic;
  vertical-align: middle;
}

.c-block__item:nth-of-type(1) {
  width: 50%;
  float: left;
}
.c-block__item:nth-of-type(2) {
  width: 45.83333%;
  float: left;
  margin-left: 4.16667%;
}

.c-block__item {
  display: flex;
  justify-content: center;
  align-items: center;
}
<div class="c-block">
  <div class="c-block__item">
    <img src="http://lorempixel.com/g/700/414/">
  </div>
  <div class="c-block__item">
    <div class="c-block__body">
      <h2>asdasdasd</h2>
      <p>lorem bababakbakabkabakbaka asdasdadasd sadasdasdasd asdasdasd asd asdasdasdasd asd asdasdasdasdasd
      </p>
      <p>asdasdasdasd aösdköalskdölaksdölkasödlk asdasdasdölmölm
        asdasdasdasdasdasdölkölkölk
      </p>
    </div>
  </div>
</div>

【问题讨论】:

  • 坚持一个问题怎么样?
  • 我试图了解这些问题之间是否存在联系,这就是为什么我发布了我所知道的 3 种常规方式......并不是要混淆

标签: html css flexbox


【解决方案1】:

您首先需要两个框的高度相同,然后垂直对齐里面的内容(除了另一个),这很容易

flex 可以嵌入和避免浮动

img {
  max-width: 100%;
  font-style: italic;
  vertical-align: middle;
}
.c-block {
  display:flex;
  }
.c-block__item:nth-of-type(1) {
  width: 50%;
}
.c-block__item:nth-of-type(2) {
  width: 45.83333%;
  margin-left: 4.16667%;
}

.c-block__item {
  display: flex;
  justify-content: center;
  align-items: center;
}
<div class="c-block">
  <div class="c-block__item">
    <img src="http://lorempixel.com/g/700/414/">
  </div>
  <div class="c-block__item">
    <div class="c-block__body">
      <h2>asdasdasd</h2>
      <p>lorem bababakbakabkabakbaka asdasdadasd sadasdasdasd asdasdasd asd asdasdasdasd asd asdasdasdasdasd
      </p>
      <p>asdasdasdasd aösdköalskdölaksdölkasödlk asdasdasdölmölm
        asdasdasdasdasdasdölkölkölk
      </p>
    </div>
  </div>
</div>

也可以使用disply:table

img {
  max-width: 100%;
  font-style: italic;
  vertical-align: middle;
}
.c-block {
  display:table;
  }
.c-block__item:nth-of-type(1) {
  width: 50%;
  display:table-cell;
}
.c-block__item:nth-of-type(2) {
  display:table-cell;
  padding-left: 4.16667%;
  text-align:center;
  vertical-align:middle;
}
<div class="c-block">
  <div class="c-block__item">
    <img src="http://lorempixel.com/g/700/414/">
  </div>
  <div class="c-block__item">
    <div class="c-block__body">
      <h2>asdasdasd</h2>
      <p>lorem bababakbakabkabakbaka asdasdadasd sadasdasdasd asdasdasd asd asdasdasdasd asd asdasdasdasdasd
      </p>
      <p>asdasdasdasd aösdköalskdölaksdölkasödlk asdasdasdölmölm
        asdasdasdasdasdasdölkölkölk
      </p>
    </div>
  </div>
</div>

但您也可以使用内联块将每个框对齐到它们的中心:

img {
  max-width: 100%;
  font-style: italic;
  vertical-align: middle;
}

.c-block__item:nth-of-type(1) {
  width: 50%;
}
.c-block__item:nth-of-type(2) {
  width: 45%;
  margin-left: 4%;
}

.c-block__item {display:inline-block;
  vertical-align:middle;
}
<div class="c-block">
  <div class="c-block__item">
    <img src="http://lorempixel.com/g/700/414/">
  </div>
  <div class="c-block__item">
    <div class="c-block__body">
      <h2>asdasdasd</h2>
      <p>lorem bababakbakabkabakbaka asdasdadasd sadasdasdasd asdasdasd asd asdasdasdasd asd asdasdasdasdasd
      </p>
      <p>asdasdasdasd aösdköalskdölaksdölkasödlk asdasdasdölmölm
        asdasdasdasdasdasdölkölkölk
      </p>
    </div>
  </div>
</div>

【讨论】:

    【解决方案2】:

    我认为浮动元素会给您带来问题。

    这对你有用吗?

    Codepen

    img {
      max-width: 100%;
      font-style: italic;
      vertical-align: middle;
    }
    
    .c-block__item:nth-of-type(1) {
      width: 50%;
      display: inline-block;
    }
    .c-block__item:nth-of-type(2) {
      width: 45.83333%;
      display: inline-block;
      vertical-align: middle;
    }
    <div class="c-block">
      <div class="c-block__item">
        <img src="http://lorempixel.com/g/700/414/">
      </div>
      <div class="c-block__item">
        <div class="c-block__body">
          <h2>asdasdasd</h2>
          <p>lorem bababakbakabkabakbaka asdasdadasd sadasdasdasd asdasdasd asd asdasdasdasd asd asdasdasdasdasd
          </p>
          <p>asdasdasdasd aösdköalskdölaksdölkasödlk asdasdasdölmölm
            asdasdasdasdasdasdölkölkölk
          </p>
        </div>
      </div>
    </div>

    【讨论】:

    • 它在 codepen 中工作,我使用 susy 作为流体网格,在主布局中它以某种方式不起作用,甚至强制使用 !important ...我只是不明白..我可能不得不放弃浮动然后完全弯曲该部分......我实际上想要避免的......非常感谢
    • 我对 susy 不熟悉,如果没有看到更多代码或网站本身就无法提供更多帮助。如果您愿意,请随时发布更多信息。祝你好运
    • 非常感谢,我想我找到了一些东西:stackoverflow.com/questions/23394133/…。我会试一试,如果有效,请在这里报告...非常感谢
    猜你喜欢
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 2021-11-29
    • 1970-01-01
    • 2020-12-18
    • 2013-03-21
    • 1970-01-01
    相关资源
    最近更新 更多