【问题标题】:Switching order of HTML elements when layout changes in Responsive Web Design响应式 Web 设计中布局更改时 HTML 元素的切换顺序
【发布时间】:2016-03-26 00:02:49
【问题描述】:

我正在构建一个响应式网站,为了获得良好的用户体验,我需要将布局从移动设备更改为桌面设备。具体来说,我需要切换一些HTML元素的顺序。

我需要 HTML 元素在桌面和移动设备上的顺序不同。

移动

<div class="one">One</div>
<div class="two">Two</div>
<div class="three">Three</div>

为桌面切换订单

<div class="one">One</div>
<div class="three">Three</div>
<div class="two">Two</div>

这是我想要完成的简化版本。我想它叫progressive enhancement。网页设计专家如何移动 html 元素?使用 JavaScript?会正常吗?有 jQuery 插件吗?

【问题讨论】:

    标签: html css


    【解决方案1】:

    根据您的布局,将有多种方法来实现这一点。如果您的 div 在桌面上并排堆叠,而在移动设备上垂直堆叠,您可以使用浮动和媒体查询的组合来让它们以正确的顺序显示。

    如果不是,您的最终后备可能是创建 4 个 div。

    <div>one</div>
    <div>three(mobile)</div>
    <div>two</div>
    <div>three(desktop)</div>
    

    然后根据设备使用媒体查询隐藏相关的“三”div。

    【讨论】:

    • 从性能的角度来看,这种方法不是不好的做法吗?移动 DOM 会因隐藏内容而膨胀。
    • 在我看来,在这种情况下有一个额外的 div 并没有什么不好,而不是用 js 做这么小的事情。
    【解决方案2】:

    只需使用 jQuery 根据需要更改 DOM

    if (mobile == true) {
    
        $('div.three').insertBefore($('div.two'));
    }
    

    【讨论】:

    • 谢谢。我只是不确定这是否是一个好习惯。在我的特殊情况下,如果我要操作 DOM,那么 HTML5 大纲会以我不想要的方式受到影响。看来我必须在满足业务需求的良好视觉用户体验和结构良好的 HTML5 大纲之间做出选择。
    • 示例不应该是 $('div.3')... 而不是 three
    • 只有当你想要无效的 CSS... :) w3.org/TR/CSS2/syndata.html#characters
    • 如果mobile 变量是基于视口设置的,则需要调整大小处理程序和额外的代码来反转顺序。你现在最好使用flexboxordercaniuse.com/#search=flexbox
    【解决方案3】:

    复活这个问题,因为我是通过谷歌遇到的,现有的答案已经过时了。我最终使用的解决方案是only one with the downvote,所以我会详细说明。

    使用display:flex 将允许您使用column/column-reverse 属性重新排序元素:

    .container{ display:flex;flex-direction:column }
    @media screen and (min-width:600px) {
      .container{ flex-direction:column-reverse }
    }
    

    请参阅 JSFiddle here,以及一些支持表 here

    还可以查看几个 CSS 后处理器 herehere

    【讨论】:

    • 如果您希望元素并排使用,您可以使用 flex-directionrowrow-reverse
    • 您甚至可以将它们混合在一起,让元素在一种情况下并排,在另一种情况下彼此重叠。
    • 既然 OP 想要切换到桌面(1、3、2)中的非顺序顺序,flex 的 order 子级属性将为此目的派上用场。然而,可访问性说明:屏幕阅读器目前都按 DOM 顺序阅读内容,忽略了 order 通过 CSS 进行的更改。
    【解决方案4】:

    你可以通过jquery做到这一点你需要做的是检查设备并根据它插入

    阅读响应式网页设计也很不错,您将在其中学习类似的东西检查这个问题Responsive Web Design Tips, Best Practices and Dynamic Image Scaling Techniques

    我在这里找到了很好的提示并检查了这个

    1. Beginner’s Guide to Responsive Web Design
    2. Responsive Web Design

    【讨论】:

      【解决方案5】:

      以下代码将在移动设备上堆叠 div,在桌面设备上将是 2 列布局

      <div class="main">
      
      </div>
      <div class="aside">
      </div>
      
      <style type="text/css">
         @media only screen and (min-width: 768px) {
            .main {float:right;width:60%}
            .aside {float:left;width:40%}
         }
      </style>
      

      【讨论】:

        【解决方案6】:

        尝试: 显示:弯曲; 弹性方向:列;

        更多信息在这里: https://developer.mozilla.org/en-US/docs/Web/CSS/flex

        【讨论】:

        • 您可以从链接页面中提取相关信息并将其发布在答案中吗?如果链接页面发生变化,那么这个答案的价值就会大大降低。
        猜你喜欢
        • 1970-01-01
        • 2021-04-13
        • 1970-01-01
        • 1970-01-01
        • 2021-10-10
        • 1970-01-01
        • 2012-03-14
        • 2019-08-03
        • 2018-11-02
        相关资源
        最近更新 更多