gpt4 book ai didi

Css-grid:在容器外流血背景

转载 作者:行者123 更新时间:2023-12-04 12:44:15 24 4
gpt4 key购买 nike

考虑以下对容器具有最大宽度约束的 3 列网格布局:

.container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 56px minmax(56px, auto) 56px;
max-width: 300px;
margin: auto;
}

header {
background-color: grey;
grid-column: 1 / span 3;
grid-row: 1 / 2;
}

main {
background-color: #2E64FE;
grid-column: 1 / span 2;
grid-row: 2 / 3;
}

aside {
background-color: #FF0040;
grid-column: 3 / span 1;
grid-row: 2 / 3;
}

footer {
background-color: grey;
grid-column: 1 / span 3;
grid-row: 3 / 4;
}

header, main, aside, footer {
line-height: 56px;
text-align: center;
vertical-align: middle;
}
<html>
<body>
<div class='container'>
<header>Header</header>
<main>Main</main>
<aside>Sidebar</aside>
<footer>Footer </footer>
</div>
</body>
</html>

理想情况下,当视口(viewport)宽度高于最大宽度时,我希望将页眉和页脚的背景移出容器,但保持网格及其结构在最大宽度内,如示例(包括内部页眉和页脚的内容)。

我考虑过这些方法:

  • 忘掉最大宽度的容器,使用带 minmax 的全宽容器,并在页眉和页脚下方放置带背景色的全跨度 div(https://codepen.io/anon/pen/OaryXj)。我不喜欢这种方法,因为它添加了纯粹用于样式的额外元素,并且因为它添加了两个额外的列(我可能可以接受这个,使用命名列)
  • 使用与上述相同的方法,但不添加额外的 div,而是使用带有“padding: 0 calc((100% - 900px)/2)”的全跨度页眉和页脚; (https://codepen.io/anon/pen/BGvoxx)。我也不喜欢这种方法,因为我不明白为什么当 100% < 900px 时它会起作用(为什么不添加负填充)并且它还会向网格添加两个额外的列。

还有其他想法吗?一些带有负边距和页眉/页脚填充的 calc() 魔法?

最佳答案

如果只是关于背景和颜色,你可以使用伪元素来产生溢出效果:

body {
overflow-x:hidden;
}

.container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 56px minmax(56px, auto) 56px;
max-width: 300px;
margin: auto;
}

header {
background-color: grey;
grid-column: 1 / span 3;
grid-row: 1 / 2;
position:relative;
}
header:before,
footer:before{
content:"";
z-index:-1;
position:absolute;
top:0;
bottom:0;
left:-100vw;
right:-100vw;
background:inherit;
}

main {
background-color: #2E64FE;
grid-column: 1 / span 2;
grid-row: 2 / 3;
}

aside {
background-color: #FF0040;
grid-column: 3 / span 1;
grid-row: 2 / 3;
}

footer {
background-color: grey;
grid-column: 1 / span 3;
grid-row: 3 / 4;
position:relative;
}

header, main, aside, footer {
line-height: 56px;
text-align: center;
vertical-align: middle;
}
<html>
<body>
<div class='container'>
<header>Header</header>
<main>Main</main>
<aside>Sidebar</aside>
<footer>Footer </footer>
</div>
</body>
</html>

关于Css-grid:在容器外流血背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53550846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com