css - “display: flex” 内的 "column-count"在 Firefox 和 IE 中呈现单列

标签 css flexbox css-multicolumn-layout column-count

我需要有一个两列布局,并且每列内再次有两列。我使用了以下代码,该代码在 Chrome 和 Safari 上呈现良好,但在 Firefox 和 IE 中呈现为单列:

我做错了什么?

.two-columns {
  column-count: 2;
  dt,
  dd {
    break-inside: avoid;
    column-break-inside: avoid;
  }
}

dl.name-value {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  dt {
    padding-right: 0.5rem;
    width: 40%;
    text-align: right;
  }
  dd {
    width: 60%;
    margin-left: auto;
  }
}
<div class="two-columns">
  <dl class="name–value">
    <dt>Milkman</dt>
    <dd>A man with a milk</dd>
    <dt>Postman</dt>
    <dd>A man with a post</dd>
    <dt>Manila</dt>
    <dd>A man with ila</dd>
    <dt>Layman</dt>
    <dd>A husband</dd>
  </dl>
</div>

编辑 – 对连字符感到抱歉。我也很困惑:(

我使用列计数的原因是我不知道我将获得多少个键值对。也许两个,也许六个,也许八个。但我仍然希望它们分成两列。这是所需布局的图像: enter image description here

最佳答案

我注意到的第一件事是你的 CSS dl.name-value选择器与 HTML <dl class="name-value"> 不匹配元素。在所有浏览器检查器中,CSS 代码都不会显示。

enter image description here

我检查了引号,但它们没问题。有时从文字处理程序(例如 MS Word)复制的引号在 CSS 中无效。

我检查了与 SCSS、HTML 定义列表 ( <dl> )、CSS 特异性及其组合相关的问题。没有什么。我还在纯 CSS 中运行了代码。还是什么都没有。

我检查了是否display: flexMulti-Column Layout 中无效。但事实证明声明中没有任何内容匹配。这是 background-color 的示例:

.two-columns {
  column-count: 2;
}

dl.name-value {
  background-color: green;
  height: 500px;
  /* display: flex;
  flex-wrap: wrap;
  justify-content: space-between;   */
}

dt {
  padding-right: 0.5rem;
  width: 40%;
  text-align: right;
}

dd {
  width: 60%;
  margin-left: auto;

}

dt,
dd {
  break-inside: avoid;
  column-break-inside: avoid;
}
<div class="two-columns">
  <dl class="name–value">
    <dt>Milkman</dt>
    <dd>A man with a milk</dd>
    <dt>Postman</dt>
    <dd>A man with a post</dd>
    <dt>Manila</dt>
    <dd>A man with ila</dd>
    <dt>Layman</dt>
    <dd>A husband</dd>
  </dl>
</div>

好吧,最终,在将选择器剥离为单个字符之后,结果发现连字符( - )是问题所在。 HTML 中使用的连字符与 CSS 中使用的连字符不同。

.two-columns {
  column-count: 2;
}

dl.name-value { /* hyphen (keyboard minus sign) now matches HTML class value */
  background-color: green;
  height: 500px;
  /* display: flex;
  flex-wrap: wrap;
  justify-content: space-between; */
}

dt {
  padding-right: 0.5rem;
  width: 40%;
  text-align: right;
}

dd {
  width: 60%;
  margin-left: auto;

}

dt,
dd {
  break-inside: avoid;
  column-break-inside: avoid;
}
<div class="two-columns">
  <dl class="name-value"><!-- hyphen (keyboard minus sign) now matches CSS selector -->
    <dt>Milkman</dt>
    <dd>A man with a milk</dd>
    <dt>Postman</dt>
    <dd>A man with a post</dd>
    <dt>Manila</dt>
    <dd>A man with ila</dd>
    <dt>Layman</dt>
    <dd>A husband</dd>
  </dl>
</div>

这可能会也可能不会解决您的问题。但很明显,在多列框中使用 Flex 容器在主要浏览器中的呈现方式有所不同。如果您可以发布有关您想要的布局的更多详细信息,也许我们可以找到一个稳定的解决方案,或者使用 column-count 、 flex 或网格。

关于css - “display: flex” 内的 "column-count"在 Firefox 和 IE 中呈现单列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49407151/

相关文章:

html - 使用 CSS 的 <dt> 标签的自定义元素符号图标不起作用

html - 带有可扩展子项的 flexbox

html - 为什么 'flex-grow' 在 Chrome 和 Firefox/Edge 中的行为不同?

html - 在 CSS 列中发现了非常奇怪的缺陷

css - 定位第 n 列(由列数构成)

javascript - 关闭按钮在 div 内的 jQuery 中不起作用

jquery - 在控件右端显示带有箭头背景颜色的工具提示

html - 如何在固定位置div下动态定位div?

html - 手机上的网格布局问题

css - 我的蓝图 CSS 不适用于列数不均匀的情况