固定位置 div 中的垂直对齐

Posted

技术标签:

【中文标题】固定位置 div 中的垂直对齐【英文标题】:Vertical alignment in a position-fixed div 【发布时间】:2019-05-12 17:16:15 【问题描述】:

我在引导列内有一个 div,它的类位置是固定的,因此里面的内容相对于视口是固定的。我能够水平对齐这些内容,但我无法垂直对齐它。

我知道 bootstrap 4 中有很多方法,但由于位置固定类,这一切似乎都中断了。内容要么消失在页面外的某个地方,要么什么都没有发生。

<div class="container-fluid">
<div class="row">

<div class="col-md">
    <div class="container">
        <div class="row justify-content-md-center">

            <div class="position-fixed h-100 col-md-auto">
                <div class="text-center vertical-center">
                    <h2>Title</h2>
                    <p>Subtext</p>
                    <a data-toggle="modal" data-target="#Modal" href="#">Click me</a>
                </div>
            </div>

        </div>
    </div>
  </div>

</div>
</div

【问题讨论】:

我会放弃你的固定位置和垂直中心并将align-items-center 添加到你的行中并完成它。 需要固定位置。我需要修复内容 【参考方案1】:
#OuterDiv 
    position: fixed;
    width: 100%;
    height: 50px;


#InnerDiv 
    display: inline-block;
    top: 50%;
    transform: translateY(-50%);
    position: relative;

【讨论】:

【参考方案2】:

如果您希望它固定位置,则没有理由将其包含在其他元素(containerrowcol)中,因为正如您所说,它的定位是相对于视口的。因此,使用自定义 CSS 将其居中...

.vertical-center 
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);

https://www.codeply.com/go/rtOA3jgjPG


或者,要使用 Bootstrap 类,使用 d-flex 使固定元素成为 flexbox 容器,然后将 align-items-center 居中。

<div class="position-fixed h-100 col-md-auto d-flex align-items-center">
      <div>centered content</div>
<div>

https://www.codeply.com/go/TmySmKXXjC

【讨论】:

【参考方案3】:

将 Bootstrap 的 flexbox utilities 应用于您要居中的 div 的父级(this 是一个很好的备忘单,说明了如果您需要不同的 flex 属性可以做什么):

<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container-fluid">
    <div class="row">
    
    <div class="col-md">
        <div class="container">
            <div class="row justify-content-md-center">
    
                <div class="position-fixed h-100 col-md-auto d-flex align-items-center">
                    <div class="text-center vertical-center">
                        <h2>Title</h2>
                        <p>Subtext</p>
                        <a data-toggle="modal" data-target="#Modal" href="#">Click me</a>
                    </div>
                </div>
    
            </div>
        </div>
      </div>
    
    </div>
    </div>

具体来说,添加 d-flex 和 align-items-center 应该可以工作。

【讨论】:

以上是关于固定位置 div 中的垂直对齐的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap 4 div(使用 btn 类)中的文本垂直对齐,使用 CSS Grid(并且没有 flexbox)时没有固定高度

垂直对齐流体 DIV 中的内容

CSS 在固定高度DIV内垂直对齐

CSS 在固定高度DIV内垂直对齐

CSS:当不知道div的固定大小时垂直对齐div

在固定大小的 div 中垂直对齐中心图像