轻松实现全版布局:使用 *:not()

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅途的每个阶段提供云产品。立即开始使用 $200 免费试用额度!

常见情况 由 Dave Rupert 文档化

假设您正在制作一个博客文章布局。内容在 WYSIWYG 编辑器字段中的 CMS 中输入。您将该内容回显到页面。您在移动设备上打开它,发现段落从边缘到边缘。哎呀,这有点不舒服。因此,您可能使用 div.container 添加了一些左右填充。

这非常有效,直到客户要求图像和视频全版显示。您通用的填充解决方案不再有效。

您有选择。容器化在任何情况下都不理想。那么如何提取那些全版元素呢?Dave 使用了我称之为反向白名单的方法。假设您希望图像和视频全版显示,但其他所有内容都需要边缘填充

.post > *:not( img ):not( video ) {
    margin-left: auto;
    margin-right: auto;
    max-width: 50rem;
    padding-left: 5%;
    padding-right: 5%;
}

他使用 :not() 来选择除图像或视频以外的所有内容。这些就是白名单。比维护包含所有可能 HTML 元素的黑名单更容易。

我在 CSS-Tricks 上的这个设计中使用了它,但没有对所有内容应用填充,而是使用了一个容器,并使用负边距将白名单项目拉到边缘。我认为 Dave 的想法更好。

直接链接 →