【问题标题】:How do I center one flexbox item in a flex container that has more than one item如何在包含多个项目的 flex 容器中将一个 flexbox 项目居中
【发布时间】:2022-01-08 16:07:46
【问题描述】:

下面的图片是我目前正在使用的。我有一个占据整个屏幕宽度的 flex 容器(一个带有红色边框的 div),它包含两个 flex 项:一个是白色方块,另一个是另一个包含按钮的 flex 容器(带有蓝色边框) .

我想要做的是在屏幕上水平居中白色方块,并让它在调整窗口/屏幕大小时按钮容器 div 不会碰撞/进入白色方块。我不知道该怎么做,所以任何帮助将不胜感激。 我的代码在图片下方。

<div class="middle-content-section">
        <div class="drawing-pad-container"></div>
        <div class="settings-container">
            <button class="grid-toggle-button">Show grid</button>
            <button class="grid-toggle-button">Hover to draw</button>
        </div>
    </div>
.middle-content-section {
    margin-top: 50px;
    display: flex;
    gap: 50px;
    width: 100%;
    border: 1px solid red;
}

.settings-container {
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: flex-start;
    gap: 20px;
    border: 1px solid blue;
}

.drawing-pad-container {
    height: 500px;
    width: 500px;
    background: rgb(255, 255, 255);
    filter: drop-shadow(2px 2px 3px rgb(180, 180, 180));
    transition: 0.3s;
    display: grid;
    grid-template-rows: repeat(30, 1fr);
    grid-template-columns: repeat(30, 1fr);
    flex: 0 0 auto;
}

【问题讨论】:

  • 那么你想要右边的设置吗?
  • @FivePlyPaper我只想要页面中间的白色方块(水平),以及保留在其右侧的设置,如原始帖子中的图像所示。

标签: html css flexbox


【解决方案1】:

参考:coryrylan.com

section {
  width: 200px;
  border: 1px solid #2d2d2d;
  display: flex;
  justify-content: center;
  align-items: center;
}
   <section>
  <div>1</div>
  <div>2</div>
  <div>3</div>
</section>

【讨论】:

    【解决方案2】:

    如果您只是想将 div 中的白色方块居中,您真正需要的只是一些边距。

    margin: 0 auto;
    

    所以我修改了我的答案,希望能更好地满足您的要求。这有点hacky,但似乎确实有效。

    我所做的是再创建一个名为items 的容器,它可以容纳两个内部物品。然后我在容器上设置一个自动边距以使白框和设置栏居中。该栏的固定宽度为 100 像素,因此我做了一个 transform: translateX(100px),然后将所有内容移动 100 像素,以校正宽度并因此偏移设置栏。

    下面是结果的代码sn-p,更改间隔。

    .middle-content-section {
        margin-top: 50px;
        display: flex;
        width: 100%;
        border: 1px solid red;
    }
    
    .items {
        margin: 0 auto;
        transform: translateX(100px);
        gap: 50px;
        display: flex;
    }
    
    .settings-container {
        
        width: 100px; 
    
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: flex-start;
        gap: 20px;
        border: 1px solid blue;
    }
    
    .drawing-pad-container {
        height: 500px;
        width: 500px;
        background: rgb(255, 255, 255);
        filter: drop-shadow(2px 2px 3px rgb(180, 180, 180));
        transition: 0.3s;
        display: grid;
        grid-template-rows: repeat(30, 1fr);
        grid-template-columns: repeat(30, 1fr);
        flex: 0 0 auto;
    }
    <div class="middle-content-section">
        <div class="items">
            <div class="drawing-pad-container"></div>
            <div class="settings-container">
                <button class="grid-toggle-button">Show grid</button>
                <button class="grid-toggle-button">Hover to draw</button>
            
            </div>
        </div>
     </div>

    【讨论】:

    • 不幸的是,这并不能完美地将白色正方形水平居中,它稍微偏向左侧(因为右侧的按钮 div)。此外,由于边距自动,按钮 div 现在一直到屏幕的右侧,这不是我想要的。 gyazo.com/44ebd039a25ddbcfca13d533fc8e9c45
    • @Lollganz 那么我很困惑。所以你想要或不想要最右边的按钮 div ?还是您希望它在白色旁边居中?
    • 对不起,如果我让它看起来很混乱,我想说的是,如果可能的话,我希望白色正方形完全水平居中(尽管它与按钮 div 共享它的 flex 容器)。希望这张图片能让你明白我的意思:gyazo.com/e8e594cd116c1bf73c78c7060836aee8
    • @Lollganz 嘿,我更新了答案,试一试。它不像我想要的那样优雅的解决方案,但似乎希望能产生适当的结果。
    • 效果很好,非常感谢! :) 我进一步研究了您的解决方案,发现有一种更快的方法可以实现同样的结果。它不需要您创建的新 .items div,它本质上是我的原始代码,但在 .middle-content-section div 上使用 justify-content: center 然后使用 transform: translateX (100px) 在白色方形 div 和按钮 div 上。 -- 希望我刚刚创建的这个 CodePen 能更好地显示它:codepen.io/lollganz/pen/xxXGGpM 再次感谢,我实际上学到了一些东西(在此之前我不知道 translateX() 存在)!
    猜你喜欢
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2014-10-21
    • 2012-03-11
    相关资源
    最近更新 更多