35

我怎样才能将它垂直居中<div class="columns is-vcentered">于包围它的红色部分?

我应该在此处删除或添加一些类以改进此代码吗?请给我建议。谢谢!

我是 CSS 框架的新手,从未尝试过 Bootstrap,而是选择了 Bulma。

在此处输入图像描述

<section id="eyes" class="section">
    <div class="container">
        <div class="columns is-vcentered">
            <div class="column">
                <h1>Eyes on what matters</h1>
                <p>Backtick is made to look minimal, so you can focus on your code, always. From UI to linter errors, everything is kept non-obtrusive.</p>
            </div>
            <div class="column">
                <img class="image" src="img/roll.jpg" alt="">
            </div>
        </div>
    </div>
</section>

在 CSS 中,除了着色元素之外,我只这样做了:

section {
    height: 70vh;
}
4

5 回答 5

45

.columns我认为默认情况下没有display:flex;(应该有吗?)有点好笑。无论如何,如果您使用增加 flex 的东西,例如:

class="columns is-flex is-vcentered"

然后你display:flex从那里得到is-desktop,现在突然is-vcentered按预期工作。

另外我认为语义是关闭的,因为is-vcentered它表明它是columns垂直居中的。但它实际上做了什么(来自源代码):

.columns.is-vcentered {
  -webkit-box-align: center;
     -ms-flex-align: center;
        align-items: center;
}

就是让 的子级columns在里面垂直居中columns。因此,您可能还需要设置columns元素的高度才能使其正常工作。

我认为is-vcentered应该命名为has-vcentered-content,但也许我遗漏了一些明显的东西。

tl;博士; 添加 height 和 flex 到columns-elementis-vcentered以做某事。

抱歉,我想这更多是对问题的推断,而不是解决方案。

我相信真正的解决方案可能是在这里使用现有的英雄职业。(顺便说一下,使用填充手动居中,就像彼得莱格的回答一样!)。

于 2017-07-06T04:43:56.297 回答
7

更新:我是从谷歌上搜索一种在非类中垂直对齐项目的方法来到这里的。其他人可能会出于同样的原因偶然发现这个地方。.content.column

如果您尝试在.content类中垂直对齐元素,这就是我所做的:

.content.is-vcentered {
  display: flex;
  flex-wrap: wrap;
  align-content: center; /* used this for multiple child */
  align-items: center; /* if an only child */
}

div注意:这对于具有固定高度的 's 非常有用。

这是一个可以处理的示例 html 结构

<div class="content is-vcentered has-text-centered">
  <h1>Content</h1>
  <p>that might be from</p>
  <p>wysiwyg containing</p>
  <p>multiple lines</p>
</div>

<div class="content is-vcentered">
  <p>Some text line</p>
</div>

这是一个示例jsfiddle

于 2018-09-07T08:56:03.137 回答
6

列未垂直居中,因为您使用了该部分的高度。使用 填充增加高度。_

删除类.section(在布尔玛)

.section {
  background-color: white;
  padding: 3rem 1.5rem;
} 

并使用您自己的填充。

例子

.red-bg {
  background: red;
}

.orange-bg {
  background: orange;
}

section {
  padding: 100px 15px;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.4.3/css/bulma.css" rel="stylesheet" />
<section class="red-bg">
  <div class="container">
    <div class="columns is-vcentered">
      <div class="column">
        <h1>Eyes on what matters</h1>
        <p>Backtick is made to look minimal, so you can focus on your code, always. From UI to linter errors, everything is kept non-obtrusive.</p>
      </div>
      <div class="column">
        <img class="image" src="http://placehold.it/400x300" alt="">
      </div>
    </div>
  </div>
</section>
<section class="orange-bg">
  <div class="container">
    <div class="columns is-vcentered">
      <div class="column">
        <img class="image" src="http://placehold.it/400x300" alt="">
      </div>
      <div class="column">
        <h1>Eyes on what matters</h1>
        <p>Backtick is made to look minimal, so you can focus on your code, always. From UI to linter errors, everything is kept non-obtrusive.</p>
      </div>
    </div>
  </div>
</section>
<section class="red-bg">
  <div class="container">
    <div class="columns is-vcentered">
      <div class="column">
        <h1>Eyes on what matters</h1>
        <p>Backtick is made to look minimal, so you can focus on your code, always. From UI to linter errors, everything is kept non-obtrusive.</p>
      </div>
      <div class="column">
        <img class="image" src="http://placehold.it/400x300" alt="">
      </div>
    </div>
  </div>
</section>


后记

你可以使用.columns is-vcentered两次。在这种情况下,您可以设置该部分的高度。

section {
  height: 70vh;
  padding: 15px;
}

.red-bg {
  background: red;
}

.orange-bg {
  background: orange;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.4.3/css/bulma.css" rel="stylesheet" />
<section class="columns is-vcentered is-centered red-bg">
  <div class="container">
    <div class="columns is-vcentered is-centered">
      <div class="column">
        <h1>Eyes on what matters</h1>
        <p>Backtick is made to look minimal, so you can focus on your code, always. From UI to linter errors, everything is kept non-obtrusive.</p>
      </div>
      <div class="column">
        <img class="image" src="http://placehold.it/400x300" alt="">
      </div>
    </div>
  </div>
</section>
<section class="columns is-vcentered orange-bg">
  <div class="container">
    <div class="columns is-vcentered">
      <div class="column">
        <img class="image" src="http://placehold.it/400x300" alt="">
      </div>
      <div class="column">
        <h1>Eyes on what matters</h1>
        <p>Backtick is made to look minimal, so you can focus on your code, always. From UI to linter errors, everything is kept non-obtrusive.</p>
      </div>
    </div>
  </div>
</section>
<section class="columns is-vcentered red-bg">
  <div class="container">
    <div class="columns is-vcentered">
      <div class="column">
        <h1>Eyes on what matters</h1>
        <p>Backtick is made to look minimal, so you can focus on your code, always. From UI to linter errors, everything is kept non-obtrusive.</p>
      </div>
      <div class="column">
        <img class="image" src="http://placehold.it/400x300" alt="">
      </div>
    </div>
  </div>
</section>

于 2017-07-06T04:29:22.840 回答
3

只需在两者上添加.is-flex类,就可以使用(Bulma v.0.7.1):div.columns.is-centered.is-vcentered

https://bulma.io/documentation/modifiers/responsive-helpers/

这是我的完整工作示例,其中一个组件位于屏幕中心:

<template>
  <div class="columns is-flex is-vcentered is-centered"> 
    <div class="column is-two-thirds-mobile is-half-tablet">
        <Login />
    </div>
  </div>
</template>
于 2018-10-07T21:47:17.167 回答
1

聚会有点晚了,但我认为在这种情况下最好的解决方案是使用margin: auto;.

于 2020-01-11T05:14:52.460 回答