在 window 两侧堆叠 3 个元素使用内联、弹性、浮动或其他方式调整 CSS 大小
Stacking 3 elements both sides on window resize with CSS using inline, flex, float or whatever
我知道有很多关于这个的问题,他们中的大多数人说这是不可能的,因为他们只询问了一种方法,这个问题是关于任何方法的,我简直不敢相信这是不可能的CSS.
我有 3 个元素,其中 2 个堆叠在左边,另一个更高,他的宽度填充剩余的 space,当屏幕变小时,它们堆叠,所以右边的元素在中间移动第一个和最后一个元素:
我尝试了不同的方法,如 display:inline-block
、float:left
(和正确的)、display:flex
(和一些 flex 属性)甚至表格!我做不到。
这是我最好的 3 次尝试:
.test_inline div{display:inline-block;}
.test_inline .right{flex-grow:1; width: calc(100% - 130px);min-width:100px;}
.test_flex{display:flex;flex-wrap: wrap}
.test_flex .right{flex-grow:1; width: calc(100% - 130px);min-width:100px;}
.test_float .left{float:left;}
.test_float .right{display: flow-root;}
/* */
.main{ margin: 50px; }
div div{ border: 1px solid #333; }
.left{ width: 100px; }
.right{ height: 50px; }
<div class='main test_inline'>
<div class='left'>1 Top left</div>
<div class='right'>2 Right</div>
<div class='left'>3 Bottom Left</div>
</div>
<div class='main test_flex'>
<div class='left'>1 Top left</div>
<div class='right'>2 Right</div>
<div class='left'>3 Bottom Left</div>
</div>
<div class='main test_float'>
<div class='left'>1 Top left</div>
<div class='right'>2 Right</div>
<div class='left'>3 Bottom Left</div>
</div>
感谢您的帮助!
有几种方法可以解决这个问题@stamin。最后,我认为您需要知道要确定 UI 高度的标记的哪一侧。
这绝对定位右边的元素,并为左边的两个元素使用 flexbox。你总是可以用另一种方式来做。
<div class="wrapper">
<div class="item one">Top Left</div>
<div class="item two">Right</div>
<div class="item three">Bottom Left</div>
</div>
CSS
.wrapper {
border: 1px solid green;
display: flex;
flex-wrap: wrap;
position: relative;
}
.item {
border: 1px solid red;
flex: 0 0 100%;
height: 100px;
}
.one,
.three {
text-align: left;
}
.two {
text-align: right;
}
@media (min-width: 768px) {
.wrapper {
padding-right: 50%;
}
.one,
.three {
float: left;
}
.two {
align-self: stretch;
position: absolute;
right: 0;
width: 50%;
height: 100%;
}
}
I simply can't believe this is not possible with CSS.
有可能。事实上,使用 CSS Grid 非常简单。
不需要浮动、内联块、绝对定位甚至 flex。
jsFiddle demo
.test_grid {
display: grid;
grid-template-columns: 150px 1fr;
grid-template-rows: 50px 50px;
grid-gap: 5px;
}
.right {
grid-row: span 2;
}
@media ( max-width: 600px) {
.test_grid {
grid-template-columns: 1fr;
grid-template-rows: 50px 50px 50px 50px;
}
}
/* */
.main {
margin: 50px;
}
div div {
border: 1px solid #333;
}
<div class='main test_grid'>
<div class='left'>1 Top left</div>
<div class='right'>2 Right</div>
<div class='left'>3 Bottom Left</div>
</div>
我知道有很多关于这个的问题,他们中的大多数人说这是不可能的,因为他们只询问了一种方法,这个问题是关于任何方法的,我简直不敢相信这是不可能的CSS.
我有 3 个元素,其中 2 个堆叠在左边,另一个更高,他的宽度填充剩余的 space,当屏幕变小时,它们堆叠,所以右边的元素在中间移动第一个和最后一个元素:
我尝试了不同的方法,如 display:inline-block
、float:left
(和正确的)、display:flex
(和一些 flex 属性)甚至表格!我做不到。
这是我最好的 3 次尝试:
.test_inline div{display:inline-block;}
.test_inline .right{flex-grow:1; width: calc(100% - 130px);min-width:100px;}
.test_flex{display:flex;flex-wrap: wrap}
.test_flex .right{flex-grow:1; width: calc(100% - 130px);min-width:100px;}
.test_float .left{float:left;}
.test_float .right{display: flow-root;}
/* */
.main{ margin: 50px; }
div div{ border: 1px solid #333; }
.left{ width: 100px; }
.right{ height: 50px; }
<div class='main test_inline'>
<div class='left'>1 Top left</div>
<div class='right'>2 Right</div>
<div class='left'>3 Bottom Left</div>
</div>
<div class='main test_flex'>
<div class='left'>1 Top left</div>
<div class='right'>2 Right</div>
<div class='left'>3 Bottom Left</div>
</div>
<div class='main test_float'>
<div class='left'>1 Top left</div>
<div class='right'>2 Right</div>
<div class='left'>3 Bottom Left</div>
</div>
感谢您的帮助!
有几种方法可以解决这个问题@stamin。最后,我认为您需要知道要确定 UI 高度的标记的哪一侧。
这绝对定位右边的元素,并为左边的两个元素使用 flexbox。你总是可以用另一种方式来做。
<div class="wrapper">
<div class="item one">Top Left</div>
<div class="item two">Right</div>
<div class="item three">Bottom Left</div>
</div>
CSS
.wrapper {
border: 1px solid green;
display: flex;
flex-wrap: wrap;
position: relative;
}
.item {
border: 1px solid red;
flex: 0 0 100%;
height: 100px;
}
.one,
.three {
text-align: left;
}
.two {
text-align: right;
}
@media (min-width: 768px) {
.wrapper {
padding-right: 50%;
}
.one,
.three {
float: left;
}
.two {
align-self: stretch;
position: absolute;
right: 0;
width: 50%;
height: 100%;
}
}
I simply can't believe this is not possible with CSS.
有可能。事实上,使用 CSS Grid 非常简单。
不需要浮动、内联块、绝对定位甚至 flex。
jsFiddle demo
.test_grid {
display: grid;
grid-template-columns: 150px 1fr;
grid-template-rows: 50px 50px;
grid-gap: 5px;
}
.right {
grid-row: span 2;
}
@media ( max-width: 600px) {
.test_grid {
grid-template-columns: 1fr;
grid-template-rows: 50px 50px 50px 50px;
}
}
/* */
.main {
margin: 50px;
}
div div {
border: 1px solid #333;
}
<div class='main test_grid'>
<div class='left'>1 Top left</div>
<div class='right'>2 Right</div>
<div class='left'>3 Bottom Left</div>
</div>