【发布时间】:2021-02-14 22:08:59
【问题描述】:
我想为网站站点地图使用 CSS 列。我遇到的问题是封装在 divs 中的部分正在跨列拆分。
我真正想要的如下所示,其中每个子元素都被强制放在单独的列中。我可以为此使用 CSS Grid,但我也需要支持较旧的 IE 版本 don't have CSS Grid。
GENERAL | SUBJECTS | FOO | BAR |
- Log in | - Log in | - Log in | - Log in |
- Register | - Register | - Register | - Register |
- Contact | - Contact | - Contact | - Contact |
- ... | - ... | - ... | - ... |
上面的每一列都包含在一个父 div 元素中(如下面的 HTML 代码所示)。
#sitemap {
min-width: 100%;
-webkit-column-break-inside: avoid;
page-break-inside: avoid;
break-inside: avoid;
-webkit-columns: 5 175px;
-moz-columns: 5 175px;
columns: 5 175px;
}
#sitemap a[href] {
text-decoration: none;
align-content: baseline;
border-bottom: 1px solid transparent;
transition: border-bottom-color 250ms 0ms cubic-bezier(0.4, 0, 0.2, 1);
display: inline-block;
}
#sitemap a[href]:hover {
border-bottom-color: #000;
}
#sitemap a[href] * {
line-height: 1.1rem;
vertical-align: middle;
}
#sitemap ul {
list-style: none;
}
<div id="sitemap">
<div class="section">
<h6 class="mdc-typography--headline6">General</h6>
<ul>
<li>
<a href="/login.php" class="mdc-typography--body1">
Log in
</a>
</li>
<li>
<a href="/getstarted.php" class="mdc-typography--body1">
Register
</a>
</li>
<li>
<a href="/getstarted.php" class="mdc-typography--body1"> Contact
</a>
</li>
<li>
<a href="/getstarted.php" class="mdc-typography--body1"> Blog
</a>
</li>
</ul>
</div>
<div class="section">
<h6 class="mdc-typography--headline6">Subjects</h6>
<ul>
<li>
<a href="/login.php" class="mdc-typography--body1">
Log in
</a>
</li>
<li>
<a href="/getstarted.php" class="mdc-typography--body1">
Register
</a>
</li>
<li>
<a href="/getstarted.php" class="mdc-typography--body1">
Contact
</a>
</li>
<li>
<a href="/getstarted.php" class="mdc-typography--body1">
Blog
</a>
</li>
</ul>
</div>
</div>
是使用弹性盒或网格布局的唯一选择吗?有什么方法可以使用多列布局来实现这一点,以保持与旧浏览器的向后兼容性?
【问题讨论】:
-
在您的问题中,它说“我真正想要的是:”下面的示例显示了“常规”和“主题”部分两次。这是有原因的吗?
-
@j08691这只是一个占位符,我将在其中添加不同的部分。我现在改成
foo和bar来消除混乱 -
因此,您有一个部分
#sitemap分为 5 列,但该部分包含两个(或更多,如果您愿意)具有任意内容的 div。我认为你把事情搞混了。如果您希望 CSS 将您的#sitemap分成 5 个部分,这正是它要做的。看看这个link,这样你就可以更好地了解如何去做。 -
我建议
break-inside: avoid; break-after: always;虽然我不完全确定这就是你想要的。虽然我会建议使用 Flexbox 或 CSS Grid 而不是当前的方法。 -
@DavidThomas 效果很好,但你提出了一个很好的观点——向前看,CSS Flex 和 Grid 是要走的路。现在我意识到无论如何我的网站都不支持 IE,所以支持它并不重要。无论如何,我使用了 kfedorov91 的答案。
标签: html css flexbox css-multicolumn-layout