在 100% 高度的 div 中居中 div(垂直和水平)(引导程序)

Posted

技术标签:

【中文标题】在 100% 高度的 div 中居中 div(垂直和水平)(引导程序)【英文标题】:Center div (vertically & horizontally) in a 100% height div (Bootstrap) 【发布时间】:2016-12-13 16:12:46 【问题描述】:

我从一个星期开始就在尝试解决我的问题,我真的尝试了一切! 我有一个两列布局(左:内容/右:内容描述)。 我想要这两列全高页面,我找到的唯一方法是:

body 
        margin: 0;
        height: 100%;
        padding: 0;


#rightcol 
    position: absolute;
    top: 0;
    bottom: 0;
    right: 0;
    overflow-y: scroll;
    height: 100%;
    text-align: right;

在我的列中使 div 居中的最接近的方法是使用(在 CSS3 中)flexbox。但是与我的列的绝对位置存在冲突。

这是我更明确的引导: http://www.bootply.com/1OovYNhx1E#

在这个例子中,我想将<h1>TEXT</h1>居中(水平和垂直)

【问题讨论】:

添加 'display: flex;证明内容:中心;对齐项目:中心;'到左列 @mlegg 是的,这几乎是完美的答案,除了:当我的 leftcol div 中有很多文本时,文本在页面顶部被“剪切”。当有不止一张图片时,也会发生同样的事情。编辑:就像这个截图一样,(我们看不到文本的开头)HERE “在顶部消失”问题仅在最小调整窗口大小时发生,或者例如在手机上(横向模式)。 【参考方案1】:

更新

Bootply 是一个糟糕的工具。所以我用 Plunker 来复制你的例子。这包括 Bootstrap 和你原来拥有的所有东西,除了:

.fluid-container.row 组合在一起。 #inner 现已移出 #leftcol #inner 具有前面提到的规则集。 两列都更改了height: 100vh 在正文中添加了position: relative

html 和 body 元素中添加了 width:100%height:100%

   #inner 
       position: absolute;
       left: 50%;
       top: 50%;
       bottom: -50%; /* This was added to offset the top: 50% which was keeping the #inner from scrolling any further to the top. */
       transform: translate(-50%, -50%);
       z-index: 9999;
   

PLUNKER


在您的中心元素上使用以下规则集:

.center 
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  z-index: 9999;

您不清楚这个居中的 div 应该在哪里居中。如果您希望它相对于视口居中(即屏幕边缘到边缘),则中心 div 不应位于任何列内。如果您希望它在左栏中居中,那么它位于正确的位置。不管怎样,如果你使用这个解决方案,它会在你放入的任何东西中完美地居中。

片段

body 
        position: relative;
        margin: 0;
        height: 100%;
        padding: 0;


#leftcol 
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    overflow-y: scroll;
    height: 100%;
    width: 50%;
    text-align: left;
    background: brown;

#rightcol 
    position: absolute;
    top: 0;
    bottom: 0;
    right: 0;
    overflow-y: scroll;
    height: 100%;
    width: 50%;
    text-align: right;
    background: yellow;


.center 
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  z-index: 9999;
  outline: 3px solid red;
  width: 25%;
  height: 25%;
  background: rgba(0,0,0,.4);

  
<div id='leftcol'></div>
<div class='center'></div>
<div id='rightcol'></div>

【讨论】:

position: relative 添加到正文中。 这并没有改变任何东西...图像在顶部被裁剪...(在 chrome、safari、firefox 上测试)。 @Befa 测试更新,我把图片放在右边,文字放在左边。您应该制作一个显示裁剪问题的示例。 1.On THIS EXAMPLE :在全屏模式下,img 在顶部被裁剪。在迷你窗口(例如横向手机)中,它与预期的一样完美(垂直和水平居中)。 2.On THIS EXAMPLE :全屏显示正常。但是在调整大小窗口(或横向手机)中,顶部被裁剪。 (如果我可以滚动查看内容,裁剪是可以的,但我不能!) 感谢您抽出宝贵的时间,但我需要我的内在位于左栏的中心,请注意身体!【参考方案2】:

终于找到答案HERE

使用 flexbox 只需添加到您的内部容器:

margin: auto;

它将防止顶部滚动问题!

【讨论】:

以上是关于在 100% 高度的 div 中居中 div(垂直和水平)(引导程序)的主要内容,如果未能解决你的问题,请参考以下文章

如何让一个img在div中居中,而img的宽度可能比div还大

在 100% 高度的 div 中垂直居中文本?

怎么让span在div中垂直居中

(转)iframe 高度100%时,出现垂直滚动条

iframe 高度100%时,出现垂直滚动条

如何在动态高度 div 中垂直居中文本?