我需要在左侧制作粉红色元素,而其他所有需要在右侧width: calc(100% - 250px)
制作,就像图像显示一样
我使用display: flex
的原因我需要将order
用于移动和平板电脑设备。我一直在尝试使用flex-basis
的属性,但不幸的是我的技巧都不起作用
html {
height: 100%;
}
body {
margin: 0;
min-height: 100%;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-flow: row wrap;
-ms-flex-flow: row wrap;
flex-flow: row wrap;
}
body > * {
box-sizing: border-box;
-webkit-box-flex: 1;
-webkit-flex: 1 calc(100% - 250px);
-ms-flex: 1 calc(100% - 250px);
flex: 1 calc(100% - 250px);
padding: 10px;
}
header {
background: tomato;
-webkit-box-ordinal-group: 3;
-webkit-order: 2;
-ms-flex-order: 2;
order: 2;
}
section {
text-align: left;
background: deepskyblue;
-webkit-box-ordinal-group: 4;
-webkit-order: 3;
-ms-flex-order: 3;
order: 3;
}
aside {
background: hotpink;
-webkit-box-flex: 1;
-webkit-flex: 1 250px;
-ms-flex: 1 250px;
flex: 1 250px;
-webkit-box-ordinal-group: 2;
-webkit-order: 1;
-ms-flex-order: 1;
order: 1;
}
footer {
background: lightgreen;
ordeR: 4;
}
<header>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nam provident at, itaque ea quia. Quaerat accusamus ex reprehenderit harum nulla quis ipsam maxime necessitatibus atque cupiditate quidem, earum laborum pariatur</header>
<aside>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odit, minima excepturi asperiores delectus eaque eligendi, aliquam quos itaque. Eligendi ipsum sapiente inventore, unde consectetur quos aliquam iure ipsam fugit ratione.</aside>
<section>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quod, modi quis vel tempora assumenda corporis quaerat at pariatur suscipit dolores eveniet, delectus deleniti quisquam. Nisi minus, voluptate repudiandae modi laboriosam</section>
<footer>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Suscipit at placeat voluptate distinctio atque aliquam et enim, quam, laudantium, velit molestias earum culpa ipsam. Deleniti totam natus saepe distinctio officia.</footer>
答案 0 :(得分:3)
您可以通过将嵌套的Flex容器设置为nsIEventTarget
方向来实现此布局:
<强> HTML 强>
column
<强> CSS 强>
<aside>aside</aside>
<div id="inner-flex-container">
<header>header</header>
<section>section</section>
<footer>footer</footer>
</div>
上面的代码创建了这种响应灵活的布局(并且全部是valid HTML):
调整移动设备/平板电脑的布局
使用上面的HTML,html {
height: 100%;
box-sizing: border-box; /* https://css-tricks.com/box-sizing/ */
}
*, *:before, *:after {
box-sizing: inherit; /* https://css-tricks.com/box-sizing/ */
}
body {
margin: 0;
min-height: 100%;
display: flex; /* body is the outer flex container */
flex-flow: row wrap;
text-align: center;
}
#inner-flex-container {
display: flex;
flex-direction: column;
width: calc(100% - 250px);
}
aside { flex: 1 250px; background: hotpink; }
header { flex: 1; background: tomato; }
section { flex: 4; background: deepskyblue; }
footer { flex: 1; background: lightgreen; }
属性仍可用于重新排列弹性项目:
CSS (添加了订单属性和媒体查询)
order
使用html {
height: 100%;
box-sizing: border-box; /* https://css-tricks.com/box-sizing/ */
}
*, *:before, *:after {
box-sizing: inherit; /* https://css-tricks.com/box-sizing/ */
}
body {
margin: 0;
min-height: 100%;
display: flex; /* body is the outer flex container */
flex-flow: row wrap;
text-align: center;
}
#inner-flex-container {
display: flex;
flex-direction: column;
width: calc(100% - 250px);
order: 1;
}
aside { flex: 1 250px; order: 0; background: hotpink; }
header { flex: 1; order: 0; background: tomato; }
section { flex: 4; order: 1; background: deepskyblue; }
footer { flex: 1; order: 2; background: lightgreen; }
@media screen and ( max-width: 500px) {
body { flex-direction: column; }
aside { flex: 1; order: 2; }
#inner-flex-container { width: 100%; flex: 1; }
}
,可以重新安排一个灵活项目块{ - 1}}和order
。
第二块弹性项目 - aside
,#inner-flex-container
和header
- 也可以重新排列。
在这种情况下,section
的唯一限制是,如果您想在footer
块中重新安排order
。
(当然,生活就是这样,你已经修改了你的问题,说这个限制正是你所需要的: - )
答案 1 :(得分:1)
这是一个完全符合您要求的解决方案,保留您的结构,并在屏幕变大时重新定位aside
的媒体查询。
编辑:第二版,使用弹性和媒体查询。
html {
height: 100%;
}
body {
margin: 0;
min-height: 100%;
display: flex;
flex-flow: column;
}
body > * {
box-sizing: border-box;
padding: 10px;
}
header {
background: tomato;
flex: 0;
}
section {
flex: 1;
text-align: left;
background: deepskyblue;
}
aside {
flex: 0;
background: hotpink;
}
footer {
flex: 0;
background: lightgreen;
}
@media screen and ( min-width: 500px) {
body {
flex-wrap: wrap;
max-height: 100%;
}
aside {
min-height: 100vh;
width: 150px;
order: 1;
}
header,
section,
footer {
order: 2;
width: calc(100% - 150px);
}
}
<header>Header</header>
<aside>Aside</aside>
<section>Section</section>
<footer>Footer</footer>
第一个版本,我使用的位置是绝对和弯曲。
html {
height: 100%;
}
body {
margin: 0;
min-height: 100%;
display: flex;
flex-flow: column;
position: relative;
}
body > * {
box-sizing: border-box;
padding: 10px;
}
header {
background: tomato;
flex: 0;
}
section {
flex: 1;
text-align: left;
background: deepskyblue;
}
aside {
flex: 0;
background: hotpink;
}
footer {
flex: 0;
background: lightgreen;
}
@media screen and ( min-width: 500px) {
aside {
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 150px
}
header,
section,
footer {
margin-left: 150px;
}
}
<header>Header</header>
<aside>Aside</aside>
<section>Section</section>
<footer>Footer</footer>
答案 2 :(得分:0)
您实际上尝试混合使用行和列布局的混合方式。 flex不做。但是柔性盒子可以被消除,这样就可以了。
你不应该将flex用于一边,而是将身高和身高设置为身体(不是最小高度),从那里你可以包裹你的列并在一行中绘制其中的两个。
但固定高度不允许身体长高和html滚动,除非你覆盖这个并通过javascript更新身体的高度...如果inbrication真的不是一个选项。
html, body {
height: 100%;
width:100%;
}
body {
margin: 0;
height: 100%;/*maybe not min-height but height usable for aside */
/* beside, i guess IE will get it via height */
display:flex;
flex-wrap:wrap;
flex-direction:column;
}
header {
background: tomato;
order: 2;
flex:1;
}
section {
text-align: left;
background: deepskyblue;
order: 3;
width:calc(100% - 250px);/* remove here width of aside , px, %, vw, whatever value used */
flex:4;/* or more, or less, depends how much you want header/footer to shrink when everything is empty or small contents */
}
aside {
background: hotpink;
height:100%;
width:250px;
order:1;
/* no flex values here, just use height */
}
footer {
background: lightgreen;
order: 4;
flex:1;
}
body>* {
box-sizing:border-box;
padding:10px;
/* add X,Y center
display:flex;
font-size:4vw;
align-items:center;
justify-content:center; */
}
<header>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nam provident at, itaque ea quia. Quaerat accusamus ex reprehenderit harum nulla quis ipsam maxime necessitatibus atque cupiditate quidem, earum laborum pariatur</header>
<aside>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odit, minima excepturi asperiores delectus eaque eligendi, aliquam quos itaque. Eligendi ipsum sapiente inventore, unde consectetur quos aliquam iure ipsam fugit ratione.</aside>
<section>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quod, modi quis vel tempora assumenda corporis quaerat at pariatur suscipit dolores eveniet, delectus deleniti quisquam. Nisi minus, voluptate repudiandae modi laboriosam</section>
<footer>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Suscipit at placeat voluptate distinctio atque aliquam et enim, quam, laudantium, velit molestias earum culpa ipsam. Deleniti totam natus saepe distinctio officia.</footer>
要允许aside
重新设置,您可以使用max-width
和min-width
(请参阅下面的代码段)
html,
body {
height: 100%;
width: 100%;
}
body {
margin: 0;
height: 100%;
display: flex;
flex-wrap: wrap;
flex-direction: column;
}
header {
background: tomato;
order: 2;
flex: 1;
}
section {
text-align: left;
background: deepskyblue;
order: 3;
flex: 4;
/* or more, or less, depends how much you want header/ffoter to shrink when everything is empty or small contents */
}
header,
section,
footer {
width: calc(100% - 20%);
/* that's about aside's width */
max-width: calc(100% - 150px);
/* keep room for aside's min-width */
overflow: auto;
}
aside {
background: hotpink;
height: 100%;
min-width: 150px;
/* keep it not smaller than */
width: 20%;
/* don let it grow more than */
order: 1;
}
footer {
background: lightgreen;
order: 4;
flex: 1;
}
body>* {
padding: 10px;
box-sizing: border-box;
overflow: auto;
}
<header>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nam provident at, itaque ea quia. Quaerat accusamus ex reprehenderit harum nulla quis ipsam maxime necessitatibus atque cupiditate quidem, earum laborum pariatur</header>
<aside>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odit, minima excepturi asperiores delectus eaque eligendi, aliquam quos itaque. Eligendi ipsum sapiente inventore, unde consectetur quos aliquam iure ipsam fugit ratione.</aside>
<section>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quod, modi quis vel tempora assumenda corporis quaerat at pariatur suscipit dolores eveniet, delectus deleniti quisquam. Nisi minus, voluptate repudiandae modi laboriosam</section>
<footer>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Suscipit at placeat voluptate distinctio atque aliquam et enim, quam, laudantium, velit molestias earum culpa ipsam. Deleniti totam natus saepe distinctio officia.</footer>
答案 3 :(得分:0)
你可以试试这样的事情
* {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
body {
padding: 0;
margin: 0;
}
.wrapper {
display: -webkit-flex;
display: flex;
-webkit-flex-flow: column wrap; /* Safari 6.1+ */
flex-flow: column wrap;
height: 100vh;
}
.wrapper > * {
padding: 10px;
}
.header {
background: tomato;
width: calc(100% - 15%);
}
.aside {
background: hotpink;
-webkit-flex-basis: 100%;
flex-basis: 100%;
width: 15%;
}
.main {
background: deepskyblue;
-webkit-flex-grow: 1;
flex-grow: 1;
width: calc(100% - 15%);
}
.footer {
background: lightgreen;
width: calc(100% - 15%);
}
@media (max-width: 800px) {
.header {
order: 1;
width: 100%;
}
.aside {
order: 2;
-webkit-flex-basis: auto;
flex-basis: auto;
width: 100%;
}
.main {
order: 3;
width: 100%;
}
.footer {
order: 4;
width: 100%;
}
}
&#13;
<div class="wrapper">
<aside class="aside">Aside</aside>
<header class="header">Header</header>
<article class="main">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quod, modi
quis vel tempora assumenda corporis quaerat at pariatur suscipit
dolores eveniet, delectus deleniti quisquam. Nisi minus, voluptate
repudiandae modi laboriosam.
</p>
</article>
<footer class="footer">Footer</footer>
</div>
&#13;
答案 4 :(得分:-4)
你应该使用float:right和float:left,并相应地添加宽度和高度。 示例可能如下所示:
html {
height: 100%;
}
body {
margin: 0;
}
header {
background: tomato;
height: 20%;
float: right;
width: 85%;
}
section {
height: 60%;
width: 85%;
background: deepskyblue;
float: right;
}
aside {
background: hotpink;
width: 15%;
height: 100%;
float: left;
}
footer {
background: lightgreen;
width: 85%;
height: 20%;
float: right;
}