【问题标题】:Clearing inline-blocks?清除内联块?
【发布时间】:2019-01-15 10:36:59
【问题描述】:

我有

.centered-holder {
    margin-left: auto;
    margin-right: auto;
    clear: left;
    display: inline-block;
}

然后

<div class="centered-holder">misc content 1</div>
<div class="centered-holder">misc content 2</div>
<div class="centered-holder">misc content 3</div>

我只希望每行最多一个,这实际上可能吗?这是一个 iPhone HTML5 应用程序,所以旧的浏览器限制不是问题。

【问题讨论】:

  • clear 属性只会影响浮动元素,你没有任何浮动元素。
  • 其实 clear 不需要应用到浮动元素上,你可以应用到内联元素上来阻止它弹出。我需要一些类似的解决方案
  • 不,它不需要应用于 floated 元素,但它只会清除 floated 元素。它不会“清除”内联块元素,因为它不是在左侧或右侧“浮动”。如果您希望它们在不同的行上,下面的解决方案应该可以工作。也许您可以提供一个更好的例子来说明您正在尝试做的事情。
  • 我不确定你的意思 - 将它们设置为显示为块级元素可以解决这个问题,并且它们会保持居中,根据你的一个 cmets。为什么你需要他们成为inline-blocks?

标签: html css


【解决方案1】:

取决于您的 CSS 声明和标记,但您可以尝试将此 CSS 声明放在父容器上:

white-space: pre-line;

通过这种方法,您可以避免将.centered-holder 转换为块元素,并且您仍然可以在父容器上使用例如text-align:center


行前 - 此值将导致空格序列折叠成单个空格字符。换行将发生在任何地方 必须填充行框,以及标记中的新行(或 在生成的内容中出现“\a”)。换句话说,就像 正常,除了它会遵守明确的换行符。

您可以在此处找到有关空白的更多信息:


最后,您可以使用这些 CSS 声明:

.parent-container {
    white-space: pre-line /* Create new line for each DIV */;
    line-height:0 /* Mask the extra lines */;
    *white-space: pre /*FixIE7*/;
    *word-wrap: break-word /*FixIE7*/;
}

.centered-holder {
    display: inline-block;
    line-height:100% /* Restore a default line-height */;
    *display: inline /*FixIE7*/;
    *zoom: 1 /*FixIE7*/;
}

我发现这个问题很有趣,所以我还给出了 IE6-7 的 CSS 声明(pre-lineinline-block 修复)。它应该对其他有类似问题的人有用。

【讨论】:

  • 非常感谢您的回答:)发现您也可以在主要内容条中仅包含块,然后敲击 text-align:center;在他们。然后将内联块放入其中。通过这样做,您的内容将居中(因为父块跨越整个宽度,并将内联块居中)
【解决方案2】:

display:inline-block 更改为display:table 可能会成功。

默认情况下,表格会清除其兄弟元素(如块 div),并且其宽度会扩展以适应其内容(如内联 div)。

【讨论】:

  • 使用它来打破一系列链接到他们自己的媒体查询行。使用 :after 和 :before 伪元素进行样式设置和悬停状态。这就像“显示:块;”但没有捏造我的伪元素或悬停。
【解决方案3】:

如果您删除 display: inline-block;,它们将一个在另一个之上。

块级元素从新行开始,DIV默认是块级的。

【讨论】:

  • 是的,我知道。问题是我的容器上有 text-align:center 因为我喜欢自动居中功能,看起来我可能不得不用 JS 来做到这一点
  • 您可以随时添加:.centered-holder:after{ content:"\A"; } 不过看起来像个 hack。
【解决方案4】:

或者您可以在 inline-blocks 之后添加一个带有显示块的 div。

.centered-holder {
    margin-left: auto;
    margin-right: auto;
    clear: left;
    display: inline-block;
}
.clear-inline {
    display: block;
}

然后

<div class="centered-holder">misc content 1</div>
<div class="clear-inline"></div>
<div class="centered-holder">misc content 2</div>
<div class="clear-inline"></div>
<div class="centered-holder">misc content 3</div>
<div class="clear-inline"></div>

【讨论】:

  • 这是非常糟糕的做法,而且非常 hacky。
  • 嗯,这是 CSS。 Hacky 是它的第二个名字。
  • 这也可以用伪元素来完成,让它不那么hacky。见codepen.io/ivancamilov/pen/jqmWEL
  • 如果你想添加到 DOM 中,最好使用 &lt;br&gt; 标签。
猜你喜欢
  • 2021-07-22
  • 2017-05-18
  • 2012-11-17
  • 1970-01-01
  • 2019-07-22
相关资源
最近更新 更多