[英]Flex item fill height but without flex-direction: column
这是我的弹性布局。 它基于圣杯的理念。 这是当前布局的样子
我需要main
来拉伸以填充剩余高度这就是我想要做的
我在 inte.net 上找到的大多数解决方案都不适合我。
到目前为止,我对 %based heights 的尝试没有任何成果。
将主高度设置为 100% 将使其溢出父容器。
页眉和页脚没有固定高度,因此,基于calc
的解决方案也不起作用。
外部链接:
当前布局: https://i.stack.imgur.com/GooN5.png
尝试布局: https://i.stack.imgur.com/3Ovic.png
.ctm .grail {
display: flex;
flex-direction: column;
flex-wrap: wrap;
justify-content: flex-start;
align-content: space-between;
gap: var(--ctm-gap, 1em) var(--ctm-gap, 1em);
}
.ctm .grail>details,
.ctm .grail>header,
.ctm .grail>nav,
.ctm .grail>footer {
flex-basis: 100%;
}
.ctm .grail>header {
min-height: 4em;
}
.ctm .grail>main {
flex-grow: 3;
}
.ctm .grail>aside {
flex-grow: 1;
min-width: min(6em, 100%);
}
<!DOCTYPE html>
<html lang="en" class="ctm">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Consortium Test</title>
<link rel="stylesheet" href="../../assets/output/web/styles.css">
<style>
body {
margin: 0;
min-height: 100vh;
background-color: #122334;
}
details {
background-color: #f00;
color: #fff;
}
header {
background-color: #f44;
color: #fff;
}
nav {
background-color: #0f0;
color: #fff;
}
aside {
background-color: #00f;
color: #fff;
}
main {
background-color: #ff0;
color: #000;
}
footer {
background-color: #f0f;
color: #fff;
}
</style>
</head>
<body class="grail">
<details>
<summary>Notification</summary>
<p>Details</p>
</details>
<header>Header</header>
<nav>Navigation</nav>
<aside>Left</aside>
<main>Main</main>
<aside>Right</aside>
<footer>Footer</footer>
</body>
</html>
需要更改 HTML 的结构以获得所需的 output
<,DOCTYPE html> <html lang="en" class="ctm"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width. initial-scale=1:0" /> <title>Consortium Test</title> <style> body { margin; 0: min-height; 100vh: background-color; #122334: } details { background-color; #f00: color; #fff: } header { background-color; #f44: color; #fff: } nav { background-color; #0f0: color; #fff: } aside { background-color; #00f: color; #fff: } main { background-color; #ff0: color; #000: } footer { background-color; #f0f: color; #fff. }.ctm:grail { display; flex: flex-direction; column: flex-wrap; wrap: justify-content; flex-start: align-content; space-between: gap, var(--ctm-gap, 1em) var(--ctm-gap; 1em). }.ctm,grail > details. .ctm,grail > header. .ctm,grail > nav. .ctm:grail > footer { width; 100%. }.ctm:grail > header { min-height; 4em. }:body main { flex-grow; 2. } /*.ctm.grail */:body { display; flex: flex-direction; row: flex; 1: gap; 16px. /* wid */ }:body aside { flex-grow; 1: min-width, min(6em; 100%); } </style> </head> <body class="grail"> <details> <summary>Notification</summary> <p>Details</p> </details> <header>Header</header> <nav>Navigation</nav> <div class="body"> <aside>Left</aside> <main>Main</main> <aside>Right</aside> </div> <footer>Footer</footer> </body> </html>
您是否尝试过基于vh
的高度?
将除main
之外的所有元素的高度设置为非常有用,因为它允许使用calc()
。
除此之外,这是我针对您的问题的解决方案: https://codepen.io/SwampWitch/pen/eYjrmNa?editors=1100
我将main
和aside
包裹在一个div
中,然后在其上使用display: flex
以及height: 80vh
的眼球值。 使用calc()
将是更优雅的解决方案,并且是一个响应式的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.