html - CSS/HTML - Flexbox - 中心响应元素
问题描述
我正在尝试实现响应式页面。我已经设法得到以下结果,但我希望所有框(logo|links|ic|breadcrumb)都是他们父母的全高/全宽。这些框也应该完全填满可用空间。
小提琴链接
- 与
min-height
:https ://jsfiddle.net/sxr3eq84/142/ - 与
align-items: stretch
父母:https ://jsfiddle.net/ycsmo8fx/15/
我试过的
<nav><a/><nav>
使用属性从标题中强制占用全部空间,min-height
但它破坏了 Flexboxalign-items: center;
属性。
期望的输出
我所有的 Flexbox 孩子看起来都像左上角的蓝色盒子,没有破坏
align-items: center;
属性。所有
<nav><a/></nav>
来自标题的内容都垂直和水平居中,同时占用整个可用空间。面包屑项目垂直和水平居中,同时占用整个可用空间。
html, body { height: 100%; }
body {
margin: 0;
overflow-wrap: break-work;
}
.root {
max-width: 1200px;
height: 100%;
margin: auto;
}
.header {
/* FLEX */
display: flex;
align-items: center;
/* OTHERS PROPS */
height: 80px;
background-color: yellow;
text-align: center;
/* set a solid border inside the header and not on its edge */
box-sizing: border-box;
border-bottom: 3px solid black;
}
.header-child-1 {
/* FLEX */
flex: 3;
/* OTHERS PROPS */
min-height: 80px; /* ERROR : using min-height property breaks align-items */
background-color: blue;
}
.header-child-2 {
/* FLEX */
flex: 5;
/* OTHERS PROPS */
background-color: white;
}
.header-child-3 {
/* FLEX */
flex: 3;
/* OTHERS PROPS */
background-color: red;
}
.main {
/* FLEX */
display: flex;
align-items: stretch;
flex-direction: column;
/* OTHERS PROPS */
height: calc(100vh - 80px);
background-color: green;
}
.main-header {
/* FLEX */
flex: 1;
/* OTHERS PROPS */
text-align: center;
min-height: 40px;
max-height: 40px;
background-color: pink;
}
.main-main {
/* FLEX */
flex: 1;
/* REMOVE THE GLOBAL PAGE SCROLLBAR, FLEXBOX ADD IT AUTOMATICALLY TO THAT HTML ELEMENT */
overflow: auto;
/* OTHERS PROPS */
text-align: justify;
background-color: purple;
}
<!DOCTYPE html>
<html>
<body>
<div class='root'>
<header class='header'>
<nav class='header-child-1'>
<a>Logo</a>
</nav>
<nav class='header-child-2'>
<a>link1</a>
<a>link2</a>
<a>link3</a>
</nav>
<nav class='header-child-3'>
<a>ic1</a>
<a>ic2</a>
<a>ic3</a>
</nav>
</header>
<main class='main'>
<header class='main-header'>
<a>Breadcrumb 1</a>
<a>Breadcrumb 2</a>
</header>
<main class='main-main'>
content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content
</main>
</main>
</div>
</body>
</html>
解决方案
.header{
align-items: stretch;
}
.header-child-1, .header-child-2, .header-child-3{
display: flex;
align-items: center;
justify-content: center;
//remove min-height from .header-child-1
}
.header-child-2{
display: flex;
}
.header-child-2 a{
width: 33.333%;
}
.main-header{
display: flex;
align-items: center;
}
.main-header a{
width: 50%;
}
推荐阅读
- jquery - 当折叠元素已经显示时,Bootstrap 4展开全部/全部折叠按钮不起作用
- ios - сconstraints 在具有收藏视图的 iPad 上不起作用
- javascript - 鉴于以下代码,为什么我的 $_FILES 为空?
- azure-web-app-service - Azure Web App:为什么高级版比标准版便宜
- php - 在php中按日期(字符串)过滤和排序foreach循环
- text - 如何在星期一通过 Twilio 接收入站文本?
- python - ImportError:无法从“urllib3.util.url”导入名称“IPV6_ADDRZ_RE”
- amazon-web-services - 在 AWS - 不可变和蓝/绿部署之间的区别?
- android - 在执行后台作业时禁用 RecyclerView 项目 onClick
- ffmpeg - 使用 ffmpeg 录制 X 屏幕时获得一致的 60fps