【问题标题】:How to vertically center elements in Bulma?如何在 Bulma 中垂直居中元素?
【发布时间】:2017-07-04 05:45:10
【问题描述】:

我怎样才能将这个<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;
}

【问题讨论】:

  • 在 Stack Overflow 中,我们更喜欢使用文本而不是图片,但是关于您网站的图片很好。这是我的建议。用图片展示网站是什么,用文字展示代码(并非所有浏览器都支持图片)
  • 好的。我会保留这张图片并提供代码。

标签: css bulma


【解决方案1】:

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

class="columns is-flex is-vcentered"

然后你从is-desktop 得到display:flex,现在突然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;博士;为columns 元素添加高度和弹性,以便is-vcentered 做一些事情。

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

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

【讨论】:

  • 这行得通,但是如何将项目与底部对齐?好像没有is-vbottom。
  • is-flex-direction-column is-justify-content-flex-end
  • 是的,我找到了。谢谢。
【解决方案2】:

更新:我是通过谷歌搜索一种方法来垂直对齐.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 非常有用。

这是一个可以使用的示例 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

【讨论】:

    【解决方案3】:

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

    删除类.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>

    【讨论】:

      【解决方案4】:

      只需在 div.columns 上添加 .is-flex 类,.is-centered.is-vcentered 都将可用(Bulma v.0.7.1):

      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>
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 应该用在什么地方?
        • 将其作为内联样式添加到要居中的元素。或者您可以使用该 css 属性创建一个新类,然后将您的新类添加到 html 元素。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-05
        • 1970-01-01
        • 2020-08-28
        • 1970-01-01
        • 2012-10-11
        相关资源
        最近更新 更多