Twitter bootstrap Twitter引导移动组件-最佳实践

Twitter bootstrap Twitter引导移动组件-最佳实践,twitter-bootstrap,responsive-design,Twitter Bootstrap,Responsive Design,当使用Twitter引导构建一个响应迅速的网站时,可以使用优秀的JavaScript组件,例如tabs或collapse(手风琴)。然而,特定组件的选择并不一定适用于所有设备 在我的情况下,在桌面版本中,我使用。但在智能手机版本中,标签变得不可用,因为一旦一个人有三个或三个以上的标签,由于屏幕太小,它们就无法排成一行。 相反,对于移动版本a将是一个不错的选择 我的问题旨在阐明实施这种变革的最佳实践。我可以想象有两种解决方法,但都相当丑陋,我想知道是否有更干净的解决方案: 使用CSS类visibl

当使用Twitter引导构建一个响应迅速的网站时,可以使用优秀的JavaScript组件,例如tabs或collapse(手风琴)。然而,特定组件的选择并不一定适用于所有设备

在我的情况下,在桌面版本中,我使用。但在智能手机版本中,标签变得不可用,因为一旦一个人有三个或三个以上的标签,由于屏幕太小,它们就无法排成一行。 相反,对于移动版本a将是一个不错的选择

我的问题旨在阐明实施这种变革的最佳实践。我可以想象有两种解决方法,但都相当丑陋,我想知道是否有更干净的解决方案:

  • 使用CSS类visible desktop创建一个选项卡式内容,使用CSS类visible phone创建一个折叠内容。这有一个缺点,即实际的选项卡内容必须交付两次,如果它包含用户生成的HTML代码(如我的情况),那么一旦用户输入带有id的HTML元素,就会导致W3C无效代码(因为该id将在页面上出现两次)

  • 通过JavaScript从制表符更改为折叠。这不是一个令人满意的解决方案,因为a)它需要执行javascript,b)有很多代码需要更改(请参阅文档中标记的差异)


  • 我的方法是将我的主列表菜单变成手机显示的下拉菜单。

    我根据上面的代码编写了我的产品代码,并对其进行了大量修改,使其成为大型显示器的滑动面板和移动电话的下拉列表

    为什么要考虑手机下拉列表呢?在手机屏幕上,下拉菜单列表将激活手机的本机滚动用户界面,其外观和性能与本机手机应用程序非常相似。使用下拉列表还可以减少设计中的高度承诺

    当下拉菜单激活时,用户将自动转到所选项目链接

    我的例子如下:

    $(文档).ready(函数(){
    var sNavFirsLI2=$(this).find(“#gbl_sNav ul”).children(“:first child”);
    sNavFirsLI2.each(函数(){
    log('Outside:'+$(this.html());
    });
    });无功电流;snavacrdion=新布尔值(false);currentSnav=$(“#gbl_sNav”).html();
    $(“#removeAccordion”)。单击(函数(){
    如果(SNAVACRDION==真){
    内容的变化;
    $('gbl_sNav ul').show();
    $('#gbl_sNav select')。删除();
    //将Snav设置回false
    sNavAccordion=假;
    }否则{
    警报(“无需移除”);
    }
    });
    $(“#enableAccordion”)。单击(函数(){
    如果(SNAVACRDION==false){
    $(“”)。附于(“#gbl_sNav”);
    $("", {
    “已选定”:“已选定”,
    “价值”:“,
    “文本”:“转到…”
    }).附于(“#gbl#U sNav select”);
    $(“#gbl_sNav a”)。每个(函数(){
    var myli=$(本);
    $("", {
    “value”:myli.attr(“href”),
    “text”:myli.text()
    }).附于(“#gbl#U sNav select”);
    });     
    $('gbl_sNav ul').hide();
    sNavAccordion=真;
    }否则{
    返回false;
    }
    });     
    
        $(document).ready(function() {
        var sNavFirsLI2 = $(this).find("#gbl_sNav ul").children(":first-child");        
        sNavFirsLI2.each(function(){
                   console.log('Outside: '+$(this).html());
        });
    });var currentSnav;  sNavAccordion = new Boolean(false);  currentSnav = $("#gbl_sNav").html();
    
    $("#removeAccordion").click(function() {
        if(sNavAccordion == true){
            var tempContents;
                $('#gbl_sNav ul').show();
                $('#gbl_sNav select').remove();
                //set Snav back to false
                sNavAccordion = false;  
        }else{
            alert('Nothing to remove');
        }
    });
    
        $("#enableAccordion").click(function() {        
            if(sNavAccordion == false){
                $("<select />").appendTo("#gbl_sNav");
                $("<option />", {
                   "selected": "selected",
                   "value"   : "",
                   "text"    : "Go to..."
                }).appendTo("#gbl_sNav select");
                $("#gbl_sNav a").each(function() {
                 var myli = $(this);
                 $("<option />", {
                     "value"   : myli.attr("href"),
                     "text"    : myli.text()
                 }).appendTo("#gbl_sNav select");
                });     
            $('#gbl_sNav ul').hide();
    
                sNavAccordion = true;               
            }else{
                return false;
            }
        });