【问题标题】:Does flexbox display alter margin widths?flexbox 显示是否会改变边距宽度?
【发布时间】:2013-04-20 09:21:08
【问题描述】:

使用 flexbox(当前版本或显示:flex;)时我的边距似乎翻了一番,我不知道为什么。页面上所有其他部分之间的边距显示为 10 像素,因为它们已设置,但用于 flexbox 内容的边距显示为大约两倍。我已经尝试将包装器 div (#output) 设置为 margin: 0px;和填充:0px;但这没有任何效果。这是一个 flexbox 的“功能”吗?还是我的 CSS 的边距/填充设置有问题?

HTML:

<div id="all_content">
    <section id='search_box'>
        <h1>Auto Primer</h1>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
    </section>

    <div id="output">
        <nav id='user_input'>
                    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
        </nav>

        <section id='gene_selected'>
            <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
        </section>
    </div>

    <section id='primers'>
        <h2>Primers</h2>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
    </section>

    <section id='how_to'>
        <h2>How To Use Auto Primer</h2>
        <p><span id="form_out"></span></p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
    </section>
</div>

CSS:

div#all_content {
    width: 1200px;
    margin: 0 auto;
    padding: 0px;
}

section#search_box {
    padding: 10px;
    margin: 10px;
    background: #ebf4fb;
    border:2px solid #b7ddf2;
    border-radius: 15px;
    -moz-border-radius: 15px;
    -webkit-border-radius: 15px;
}

div#output {
    display: -webkit-box;
    display: -moz-box;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
    width: 100%;
}

nav#user_input {
    background: #ebf4fb;
    border: 2px solid #b7ddf2;
    width: 275px;
    padding: 10px;
    margin: 10px;
    border-radius: 15px;
    -moz-border-radius: 15px;
    -webkit-border-radius: 15px;
}

section#gene_selected {
    -webkit-box-flex: 1;
    -moz-box-flex: 1;
    -webkit-flex: 1;
    -ms-flex: 1;
    flex: 1;
    padding: 10px;
    margin: 10px;
    background: #ebf4fb;
    border: 2px solid #b7ddf2;
    border-radius: 15px;
    -moz-border-radius: 15px;
    -webkit-border-radius: 15px;
}
section#primers {
    padding: 10px;
    margin: 10px;
    background: #ebf4fb;
    border: 2px solid #b7ddf2;
    border-radius: 15px;
    -moz-border-radius: 15px;
    -webkit-border-radius: 15px;
}

section#how_to {
    padding: 10px;
    margin: 10px;
    background: #ebf4fb;
    border: 2px solid #b7ddf2;
    border-radius: 15px;
    -moz-border-radius: 15px;
    -webkit-border-radius: 15px;
}

编辑: 通过给左 flex 元素,我设法使边距看起来相同: 边距:0px 5px 0px 10px; 和正确的 flex 元素: 边距:0px 10px 0px 5px; 而不是边距:10px;就像页面上的所有其他元素一样。虽然这行得通,但我仍然有点不知道为什么 flexbox 会这样做。

编辑: 这是一个演示问题的 jsfiddle:fiddle。进一步更新和简化。

【问题讨论】:

  • 问题是边距在您的并排部分应用了两次。您可以通过简单地在并排元素之间正确分配边距来解决此问题。
  • 是的,我看到这种情况正在发生,但为什么不是所有元素都发生这种情况?例如,在小提琴中,最后两个元素彼此相邻,都有 10px 的边距,但它不会在那里产生相同的效果。它只发生在使用 flexbox 的元素上。它发生在 flexbox 的所有侧面,除了最外面的东边和西边,因此它们仍然与其余内容对齐。
  • 对不起,我想这有点像问为什么天空是蓝色的。对我来说,这似乎是错误的,但它只是,没什么可做的。
  • 别担心,我根据您的新输入更新了我的答案。它解释了产生这种效果的原因。

标签: css html margin padding flexbox


【解决方案1】:

问题是边距在您并排的 flex 部分应用了两次。您可以通过简单地在并排元素之间正确分配边距来解决此问题。

基于 CSS3 定义:
http://www.w3.org/TR/css3-flexbox/#item-margins

相邻弹性项目的边距不会折叠。 自动边距吸收相应维度中的额外空间,可用于对齐和推开相邻弹性项目;请参阅与“自动”边距对齐。

这就是在您的情况下发生的情况,您并排的弹性项目的边距不会折叠,但在您的其他弹性项目上,它们会折叠,因此边距不会在这些弹性项目上应用两次。

【讨论】:

  • reference.sitepoint.com/css/collapsingmargins 所以这个链接显示几乎所有其他边距都折叠了。有趣的是,他们选择让 flexbox 布局的边距不折叠,但感谢链接,这解释了为什么会发生这种情况。不确定我是否喜欢这个选择,但至少我现在知道为什么了。谢谢阿贝尔。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-01
  • 1970-01-01
  • 2015-06-13
  • 2010-12-29
  • 2015-01-08
  • 2022-12-12
  • 1970-01-01
相关资源
最近更新 更多