gpt4 book ai didi

html - 根据屏幕尺寸对不同容器中的元素重新排序

转载 作者:太空宇宙 更新时间:2023-11-04 02:27:43 25 4
gpt4 key购买 nike

我正在寻找一种跨浏览器的方式来根据屏幕大小为元素设置不同的位置和显示顺序,同时保持初始 DOM 顺序。这些元素最初位于单独的容器中,媒体查询中的标准方式(如 float/clear)可能不够用。

另外,如果是纯 CSS 解决方案就好了。

此 fiddle 使用 javascript 在加载和调整大小事件时操纵 DOM,这是不受欢迎的。

https://jsfiddle.net/168y076w/

HTML:

<body>
<div id="header">HEADER</div>
<div id="left_column">
<div id="left_box_1">LEFT BOX 1</div>
<div id="left_box_2">LEFT BOX 2</div>
</div>
<div id="main_content_holder_for_big_devices"></div>
<div id="right_column">
<div id="right_box_1">RIGHT BOX 1</div>
<div id="main_content_holder_for_small_devices">
<div id="mid_column">MID COLUMN</div>
</div>
<div id="right_box_2">RIGHT BOX 2</div>
</div>
</body>

CSS:

#header {
width: 100%;
height: 80px;
background: red;
}
#mid_column {
background: aqua;
height: 60px;
}
#left_box_1, #left_box_2 {
background: blue;
height: 40px;
}
#right_box_1 {
background: yellow;
height: 40px;
}
#right_box_2 {
background: purple;
height: 40px;
}
@media screen and (min-width: 600px) {
body {
width: 600px;
}
#left_column, #mid_column, #right_column {
float: left;
}
#left_box_1, #left_box_2, #right_box_1, #right_box_2 {
width: 150px;
}
#mid_column {
width:300px;
background: aqua;
}
}

Javascript:

const SMALL_DEVICE_WIDTH = 600;

var $holder_for_small = $( "#main_content_holder_for_small_devices" );
var $holder_for_big = $( "#main_content_holder_for_big_devices" );

window.addEventListener( "resize", move_content_in_dom );
window.addEventListener( "load", move_content_in_dom );

function move_content_in_dom() {
var w = window.innerWidth;
if( w < SMALL_DEVICE_WIDTH ) {
if( $holder_for_big.html() !== "" ) {
$holder_for_small.html( $holder_for_big.html() );
$holder_for_big.html( "" );
}
} else {
if( $holder_for_small.html() !== "" ) {
$holder_for_big.html( $holder_for_small.html() );
$holder_for_small.html( "" );
}
}
}

这张图片说明了我想要实现的布局。在手机等小型设备上,在顶部标题之后,我想要左栏中的框,在它们之后 我想要右栏中的一个框,然后是主要内容,然后是右栏中的另一个框.

Desired layout mockup

我希望得到一个能给我正确工具的答案,这样我就不必重新发明轮子了。

最佳答案

目前,您尝试做的事情只能在 Firefox 的纯 CSS 中实现。这有点复杂,但抽象地说,您要做的是独立于子元素(独立于列的元素)排列孙元素。这在 Firefox 中是可能的,因为它已经实现了 display:contents,它允许子元素对其父元素“不可见”,让您可以通过 CSS 控制孙元素的顺序。这就是我的意思:

body {
width: 100vw;
height: 100vh;
overflow: hidden;
font-weight: bold;
color: #fff;
text-shadow: 1px 1px 3px #000;
font-family: sans-serif;
}

.flex-container {
display: flex;
width: 100%;
background-color: gray;
margin-bottom: 5vh;
flex-wrap: wrap;
align-items: stretch;
}
.flex-container .cell {
padding: 4vmin;
}
.flex-container .flex-header {
background-color: red;
width: 100%;
}
.flex-container .flex-sideNav {
background-color: blue;
flex: 1;
}
.flex-container .flex-mainContainer {
background-color: green;
flex: 2;
}
.flex-container .flex-mainContainer div {
background-color: aqua;
}
.flex-container .flex-rightColumn {
flex: 1;
}
.flex-container .flex-toolbar {
background-color: yellow;
}
.flex-container .flex-adContainer {
background-color: purple;
}

@media (max-width: 600px) {
.flex-container {
flex-direction: column;
}
.flex-container > div {
width: 100%;
flex: 1 0;
}
.flex-container .flex-header {
order: 1;
}
.flex-container .flex-sideNav {
order: 2;
}
.flex-container .flex-toolbar {
order: 3;
width: 100%;
}
.flex-container .flex-mainContainer {
order: 4;
}
.flex-container .flex-adContainer {
order: 5;
width: 100%;
}
.flex-container .flex-rightColumn {
display: contents;
}
}
<div class='flex-container'>
<div class='flex-header cell'>
Header.
</div>
<div class='flex-sideNav'>
<div class='cell'>Sidenav One.</div>
<div class='cell'>Sidenav, Redux.</div>
</div>
<div class='flex-mainContainer'>
<div class='cell'>Main item, one.</div>
<div class='cell'>Main item, two.</div>
<div class='cell'>Main item, three.</div>
</div>
<div class='flex-rightColumn'>
<div class='flex-toolbar cell'>
Toolbar.
</div>
<div class='flex-adContainer cell'>
Ads.
</div>
</div>
</div>

(为方便起见,这里有一个 codepen)...您会注意到,在非 Firefox 浏览器上,工具栏 不能与广告 完全分开CSS,但 Firefox 正确地实现了这条规则:

.flex-container .flex-rightColumn {
display: contents;
}

你会得到你想要的。如此简短的回答:使用 flexbox,它今天只对 Firefox 看起来不错;使用 JavaScript,它今天对每个人都适用。祝你好运!

关于html - 根据屏幕尺寸对不同容器中的元素重新排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37060105/

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