在响应式设计上更改Div顺序

时间:2012-10-17 11:33:30

标签: css html responsive-design

我正在创建一个响应式设计网站。

基本上当视口小于X时,我想在页面底部显示菜单。

实施例 链接死亡 - 我不再拥有的网站

如果您调整浏览器窗口的大小,您会注意到3种不同的设计(基于最终目标设计而非设备类型)

V1:大于999px,你会看到红色框左上方,红色框旁边有蓝色框。

V2:介于600px和999px之间,你会发现红色框变小了,蓝色框现在位于红色框下面

v3:小于600px,您会再次注意到红色框变小,蓝色框现在变黄。

基本上,在V3中,我想制作现在的黄色方框,坐在绿色方框下方,灰色方框上方

顺序如此 红盒子 绿盒子 黄色的盒子 灰盒子

除了讨厌的隐藏旧div,显示新的div hack(技术)或JS版本(远离CSS响应) 有没有办法移动它。

CSS在文件中,因此视图源显示所有内容。

干杯

9 个答案:

答案 0 :(得分:11)

老实说,我不能想到单独使用CSS的方法,但是在jQuery中很容易实现,而不会破坏你的响应式设计。除了从#top-links div中删除margin-top之外,你的CSS不需要改变。

    <script type="text/javascript">
$(document).load($(window).bind("resize", listenWidth));

    function listenWidth( e ) {
        if($(window).width()<600)
        {
            $("#topLinks").remove().insertAfter($("#content"));
        } else {
            $("#topLinks").remove().insertBefore($("#content"));
        }
    }
</script>

答案 1 :(得分:5)

我刚刚实施了

的解决方案

http://www.jtudsbury.com/thoughts/rearrange-div-order.php

使用display: table-header-group;display: table-footer-group;

以下是两个水平50%宽度框的示例,在收缩窗口宽度上切换到左上方框:

.box-container {
    display: table;
}

.box-50 {
    width: 50%;
    display: table-cell;
    padding: 0 20px;
}

@media only screen and (max-width : 700px) {

    .box-container {
        display: block;
    }
    .box-50 {
        display: block;
        width: 100%;
    }


    /* http://www.jtudsbury.com/thoughts/rearrange-div-order.php */
    .box-50.left {
        display: table-footer-group;
    }

    .box-50.right {
        display: table-header-group;
    }

}

答案 2 :(得分:2)

试试这个可能有帮助的

    @media (min-width:1px) and (max-width:599px) {
        #pageFrame {
            width:100%;

        }
        #logo {
            margin:0 auto;
            width:50px;
            height:50px;
        }
        #topLinks {
            position:absolute;
             top:250px;
            float:right;
            width:100%;
            background-color:yellow;

        }
        #content {
            position:absolute;
            top:100px;
            clear:none;
            float:left;
            width:100%;
        }
        #footer {
            position:absolute;
            top:350px;        
            clear:both;
            width:100%;
        }

DEMO

答案 3 :(得分:2)

Flex-Box是您正在寻找的答案。退房(此链接现已中断 - http://www.jordanm.co.uk/lab/contentchoreography)以获取所有Flexbox功能的完整说明https://css-tricks.com/snippets/css/a-guide-to-flexbox/

答案 4 :(得分:2)

是的,更改容器中div的顺序非常简单。请查看我正在使用的HTML css代码。

<html>
    <head>
        <style type="text/css">
            #nav_bar{
                width:100%;
                height:50px;
                background:red;
            }
            #container{
                width:100%;
                height:500px;
            }

            #left_panel {
                position:relative;
                float:left;
                width:250px;
                border:0px solid black;
                background:#ccc;
                height:100%;
            }
            #right_panel{
                width:100%;
                background:#666;
                height:100%;
            }
            #inner_container{
                height:100%;    
            }
            .center {
                margin-left: auto;
                margin-right: auto;
                width: 40%;
                padding-top:50px;
            }
            .data_container{
                border:1px solid black;
                float:left;
                position:relative;
                padding:10px;
            }
            #footer{
                width:100%;
                height:50px;
                background:blue;
            }
            @media all and (max-width: 700px) {
                #container {
                    width: 100%; 
                    height: 500px;
                    display: flex;
                    flex-flow: column-reverse ;
                }
                #left_panel {
                    width:100%;
                    height:200px;
                }
                #right_panel{
                    width:100%;
                    height:300px;
                }
            }
        </style>
    </head>
    <body>
        <div id="nav_bar">Nav</div>
        <div id="container">
            <div id="left_panel">
                <div class="center">
                    Left Panel content
                </div>
            </div>
            <div id="right_panel">
                <div id="inner_container" class="center">
                    <div class="data_container">
                        Action Item 1
                    </div>
                    <div class="data_container">
                        Action Item 2
                    </div>
                    <div class="data_container">
                        Action Item 3
                    </div>
                </div>
            </div>  
        </div>
        <div id="footer">Footer</div>
    </body>
</html>

答案 5 :(得分:1)

尝试在页脚中创建两个div,在页眉中创建一个div,&#34; display:none&#34;当屏幕较小时,底部的一个显示它。

答案 6 :(得分:0)

您应该查看direction css属性。 https://developer.mozilla.org/en-US/docs/Web/CSS/direction

你能做的是:

    您父容器上的
  1. direction: rtl;.container { direction: rtl; }
  2. 直接子项重置为正常:.container > * { direction: ltr; }
  3. 更改HTML中div的顺序,以便在桌面版
  4. 上按正确顺序显示内容

    这适用于所有浏览器,因为所有地方都支持此属性(来自IE 5.5 ......)。

答案 7 :(得分:0)

使用EventListener和matchMedia:

 //on load
 responsive_change_box_order();
 //on resize
 window.addEventListener('resize', responsive_change_box_order );

 function responsive_change_box_order() {
       if (window.matchMedia("(max-width: 1118px)").matches) {
           jQuery("#block-menu-block-1").remove().insertBefore(jQuery("#content"));
       }
       else{
           jQuery("#block-menu-block-1").remove().prependTo(jQuery(".region-sidebar-second .region-inner"));
       }
   }

答案 8 :(得分:0)

如果您使用的是Bootstrap 4,我创建了一个简单的插件来检查当前的媒体查询断点,然后将其设置为变量。

然后您可以执行类似

的操作
  if ( xs == true ) { 
    $("#topLinks").remove().insertAfter($("#content"));
  }

您可以在此处获取:https://jacoblett.github.io/IfBreakpoint/