【问题标题】:Never allow two elements to split CSS3 Columns绝不允许两个元素拆分 CSS3 列
【发布时间】:2013-10-31 11:24:21
【问题描述】:

我无法使用 CSS3 列将两个元素“放在一起”。考虑以下 HTML:

<div style="column-count: 2"> <!-- I'm aware there's more CSS rules needed -->
    <div class="heading">Heading 1</div>
    <div class="content">Long paragraph text goes in here lalalalala</div>
    <div class="heading">Heading 2</div>
    <div class="content">Some longer paragraph text goes in here</div>
</div>

在 Chrome、Firefox 和 Safari 中,它会按照我的意愿显示:

Heading 1                 | Heading 2
Long paragraph text goes  | Some longer paragraph text goes
in here lalalalala        | in here

我使用以下 CSS 将标题和内容“粘贴”在一起 &lt;div&gt;s:

.heading {padding-bottom: 30px;}
.content {margin-top: -30px;}

这可确保标题不是一列中的最后一项,内容位于下一列中。然而,这正是 IE10 中发生的情况:

Heading 1                 | Some longer paragraph text goes
Long paragraph text goes  | in here
in here lalalalala        | 
Heading 2                 |

请记住,每列中可能有许多 #heading#content div,因此仅在标题上使用 break-after: always 是不够的。

此外,将两个元素都包装在另一个 div 中并在该 div 上添加 break-inside: avoid; 是不够的,因为 #content div 必须能够在列之间流动。

我所追求的是一些 CSS 以确保标题和内容 div 不会在分栏符处分开。

谢谢

【问题讨论】:

  • 您是否尝试过将匹配的标题和内容放入一个&lt;section&gt; 标记中?
  • 是的,刚刚试过,没什么区别
  • 你应该可以在标题上使用break-after:avoid
  • 我也是这么想的,但好像也没什么区别。

标签: html css multiple-columns


【解决方案1】:

假设您的 div ...保持不变。我将每两个 div 分成各自的列,减少每个项目范围的额外格式(即填充等)。

HTML

<div style="column-count: 2" id="columns"> <!-- I'm aware there's more CSS rules needed -->
    <div class="heading menuitem">Heading 1</div>
    <div class="content menuitem">Long paragraph text goes in here lalalalala</div>
    <div class="heading menuitem">Heading 2</div>
    <div class="content menuitem">Some longer paragraph text goes in here</div>
    <div class="heading menuitem">Heading 3</div>
    <div class="content menuitem">Some longer paragraph text goes in here</div>
    <div class="heading menuitem">Heading 4</div>
    <div class="content menuitem">Some longer paragraph text goes in here</div>    
</div>

CSS

.menuitem{
    background-color: #ccc;
    width: 200px;  height: 300px; 
    display:table-cell; 
    vertical-align:top;
}
.menuitem:nth-child(4n+1), .menuitem:nth-child(4n+2){
    background-color: #3c3c3c;
}

小提琴

http://jsfiddle.net/V99cT/


如果您想要列中的标题并假设您可以编辑 HTML,请使用:

<div style="column-count: 2" id="columns"> <!-- I'm aware there's more CSS rules needed -->
    <div class="content menuitem"><h1>Heading 1</h1>Long paragraph text goes in here lalalalala</div>
    <div class="content menuitem"><h1>Heading 2</h1>Long paragraph text goes in here lalalalala</div>
    <div class="content menuitem"><h1>Heading 3</h1>Long paragraph text goes in here lalalalala</div>
    <div class="content menuitem"><h1>Heading 4</h1>Long paragraph text goes in here lalalalala</div>    
</div>

CSS

.menuitem{
    background-color: #ccc;
    width: 200px;  height: 300px; 
    display:table-cell; 
    vertical-align:top;
   padding: 20px;
}
.menuitem:nth-child(odd){
    background-color: #3c3c3c;

}

小提琴

http://jsfiddle.net/RRfTV/

【讨论】:

  • 内容 div 的标题需要在彼此下方,而不是在其他旁边
  • @MichaelBates 是 HTML 集还是可以修改它?
  • @MichaelBates 更新了代码以允许堆叠标题和内容。这是假设您可以只使用 Header 标签而不是 DIV 作为标题。
  • 我可以完全编辑 HTML。然而,标题和内容需要一个接一个地流动(不是每个标题都在一个新列中)
猜你喜欢
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
相关资源
最近更新 更多