【问题标题】:Cross-device CSS problems跨设备 CSS 问题
【发布时间】:2013-01-28 22:34:31
【问题描述】:

我刚刚使用 Google Chrome 桌面版和移动版测试了我的网站,但滑出式菜单的标签似乎没有显示。它确实有效,只是没有显示,我不知道为什么。改变位置在这里不起作用,因为我使用的滑出设计是依赖位置的,我需要它们是fixed

相关的 CSS:

#slideout #label {
    -webkit-transform: rotate(90deg); 
    -moz-transform: rotate(90deg);
    transform: rotate(90deg);
    display:block;
    float:right;
    margin:46% 0 0 0;
    padding: 0 2px 6px 2px;
    font-size: 20px;
    position: fixed;
    left:-36px;
    -webkit-transition:left 0.5s ease-in-out,opacity 0.5s ease-in-out;
    -moz-transition:left 0.5s ease-in-out,opacity 0.5s ease-in-out;
    -o-transition:left 0.5s ease-in-out,opacity 0.5s ease-in-out;
    transition:left 0.5s ease-in-out,opacity 0.5s ease-in-out;
    background-color:#fff;
    border-bottom:0 !important;
    border-radius:8px 8px 0 0;
}

#slideout.opened #label {
    left: 86px;
}

JavaScript:

$('#label').on('click',function(){
    $('#slideout').toggleClass('opened');
});

编辑:我尝试使用此代码:

#slideout #label {
    position: absolute;
    left: 90px;
}
#slideout {
    position: relative;
}

但是发生的情况是,标签在正确的位置,但它被切断并且不可见。

【问题讨论】:

    标签: javascript jquery css google-chrome cross-platform


    【解决方案1】:

    position:fixed 在移动设备上是不可预测的,你应该可以通过切换到 position:relative 来修复它;即使这可能很困难。这里有一些不错的报道:http://www.quirksmode.org/blog/archives/2012/10/budding_consens.html

    【讨论】:

    • 刚刚更改为position: relative;,现在它在桌面上也是不可见的。我不可能改变位置,因为它会搞砸一切。
    【解决方案2】:

    查看滑动面板的 opacity 属性。

    您在隐藏面板时将不透明度设置为 0.3,您的标签在面板内,因此它也会消失。

    但看起来 chrome mobile 和 opacity 属性存在一些问题。按钮完全消失。您应该尝试将其放在面板之外。当我禁用 chrome 检查器中滑动面板的 opacity : 0.3 时,会出现标签。

    我认为您应该对此进行调查。

    【讨论】:

    • 你是对的。我不得不将#label 移到#slideout 之外,现在它可以完美运行了!
    【解决方案3】:

    除了您拥有的之外,还可以尝试以下方法:

    #slideout {
        position: relative;
    }
    #slideout #label {
        position: absolute;
        top: 46%;
        right: -10px; (approximate)
    }
    

    显然,这些是一对夫妇的替代品,因此您可以自行决定是否整合它们。另外,去掉浮动:对;

    【讨论】:

    • 改变位置在这里不起作用,因为我使用的滑出设计是依赖位置的,我需要将它们固定。
    【解决方案4】:

    这只是一个猜测,但问题可能来自 javascript 事件处理,这在移动设备上是不同的,因为事件实际上是不同的。我猜点击事件在移动设备上被触发了两次,比如“触摸”或“鼠标按下”,因此,事件发生了两次,toggleClass() 添加和删除了想要的类。因此,要么您使用 javascript 检测移动设备以添加正确的事件 Detecting a mobile browser(检测手机) jQuery mobile (click event)(适当的事件) 或者您使用计时器更改“addClass”和“removeClass”的切换类。类似的东西

    var animating = false;
    var open = false;
    $('#label').on('click',function(){
       if (!animating) {
           animating = true;
           if (open) {
              $('#slideout').removeClass('opened');
           } else {
              $('#slideout').addClass('opened');
           }
           setTimeout(function() { animating = false }, 500); // 500 = 0.5s of css animation
       }
    });
    

    希望这会有所帮助。

    【讨论】:

    • 加载后侧边栏标签不显示,而在计算机上显示。问题不能出在 click 事件处理程序中,因为它在页面加载时不会被触发,并且即使在单击之前标签也不可见。
    【解决方案5】:

    在你的 CSS 中使用 postion:fixed 以及相应的 width-height 属性。

    【讨论】:

    • 请具体一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    相关资源
    最近更新 更多