gpt4 book ai didi

html - 用于定位元素的 Flexbox 或 Column CSS

转载 作者:太空宇宙 更新时间:2023-11-03 22:31:14 26 4
gpt4 key购买 nike

是否有任何解决方案来避免 float 并使用 flexbox 并像我的表示一样制作这种类型的布局?我没有任何示例,但这张图片是我需要的。

我会尽量用文字来解释:

  • 此网格从 1025 像素开始,有 2 列和右侧的大红色方 block 。
  • 从 1100px 开始,我需要 3 列和右边的大红色方 block
  • 从 1680px 开始,我将有 4 列和右侧的大红色方 block 。

  1. 元素的位置必须和我的照片一样
  2. 根据宽高比,4 个元素将与其他元素一起下降:5、6、7、8 将与 9、10 一起下降,依此类推。
  3. 大红色必须始终与前两行具有相同的高度。
  4. 所有布局均流畅且响应迅速

我可以使用 FLOAT 和一些 JS 来非常容易地计算前两行的完全相同的高度并使大红色具有相同的高度,但我想尽可能使用 flexbox。

enter image description here

我目前的代码

.grid {
display: flex;
flex-direction: row;
}
.item {
width: 16%;
margin: 5px;
}
.red-box {

}
<div class="grid">
<div class="red-box">big box</div>

<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
<div class="item">Item 4</div>
<div class="item">Item 5</div>
<div class="item">Item 6</div>
<div class="item">Item 7</div>
<div class="item">Item 8</div>
<div class="item">Item 9</div>
<div class="item">Item 10</div>
<div class="item">Item 11</div>
<div class="item">Item 12</div>
<div class="item">Item 13</div>
<div class="item">Item 14</div>
<div class="item">Item 15</div>
<div class="item">Item 16</div>
<div class="item">Item 17</div>
<div class="item">Item 18</div>
<div class="item">Item 19</div>
<div class="item">Item 20</div>
</div>

最佳答案

如果将 Flexbox 与绝对位置结合使用,就可以做到这一点。

我所做的是利用 order 属性将 red 元素定位在右上角。有了这个,就可以使用媒体查询来控制它的位置。

为了在第二行的末尾强制换行,我使用了一个与 right_corner 元素大小相同的伪元素,并使用 order 属性来定位

为了让 red 元素居中,我使用了一个绝对定位的包装器和 Flexbox,它的高度是它的两倍,并且覆盖了 2 行。

堆栈片段

.container {
display: flex;
flex-wrap: wrap;
counter-reset: num;
}

.container .right_corner > div {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: calc(200% + 10px);
display: flex;
justify-content: center;
align-items: center;
}

.container .right_corner > div > div {
width: 300px;
min-width: 300px;
height: 250px;
background: red;
}

.container::before,
.container > div {
height: 150px;
margin: 5px;
}

.container > div:not(:first-child) {
background: lightgray;
}

.container .right_corner {
position: relative;
order: 1;
}

.container::before {
content: '';
order: 3;
}

.container > div:nth-child(n+2)::before {
counter-increment: num;
content: counter(num);
}

@media (max-width: 800px){
.container > div:nth-child(n+4) {
order: 2;
}
.container > div:nth-child(n+6) {
order: 4;
}
.container > div:not(:first-child) {
width: calc((100% / 4) - 10px);
}
.container .right_corner {
width: calc((100% / 2) - 10px);
}
.container::before {
width: calc((100% / 2) - 10px);
}
}

@media (min-width: 801px) and (max-width: 1000px){
.container > div:nth-child(n+5) {
order: 2;
}
.container > div:nth-child(n+8) {
order: 4;
}
.container > div:not(:first-child) {
width: calc((100% / 5) - 10px);
}
.container .right_corner {
width: calc((100% / 2.5) - 10px);
}
.container::before {
width: calc((100% / 2.5) - 10px);
}
}

@media (min-width: 1000px) {
.container > div:nth-child(n+6) {
order: 2;
}
.container > div:nth-child(n+10) {
order: 4;
}
.container > div:not(:first-child) {
width: calc((100% / 6) - 10px);
}
.container .right_corner {
width: calc((100% / 3) - 10px);
}
.container::before {
width: calc((100% / 3) - 10px);
}
}
<div class='container'>

<div class='right_corner'>
<div>
<div></div>
</div>
</div>

<div></div>
<div></div>
<div></div>
<div></div>

<div></div>
<div></div>
<div></div>
<div></div>

<div></div>
<div></div>
<div></div>
<div></div>

<div></div>
<div></div>
<div></div>
<div></div>

<div></div>
<div></div>
<div></div>
<div></div>

</div>

关于html - 用于定位元素的 Flexbox 或 Column CSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48444823/

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