【问题标题】:show/hide() changing block level element's width/behaviour?show/hide() 改变块级元素的宽度/行为?
【发布时间】:2012-05-08 18:11:58
【问题描述】:

我真的被这个卡住了,不知道如何解决这个问题,我使用 jQuery ~ 通常没有太多问题。但是因为我不写 JS 我确实卡住了:( 我已经搜索并搜索了答案并尝试了太多方法但没有得到任何结果...... :(我敢打赌我错过了一些非常明显或简单的东西,希望有人能够提供帮助......

好的 - 问题: 我的网页设计课程有一个网站,它在左栏中显示了主导航。对于最小的屏幕(即宽度低于 420 像素) - 我想隐藏菜单,显示一个“查看菜单”链接,而不是使用 jQuery toggle() 函数按需显示/隐藏菜单。

最初,我只通过一个直接的切换来做到这一点 - 一切都很好 - 除了菜单一旦在小屏幕上显示和隐藏一次就会保持隐藏的问题。如果调整窗口大小 - 它将保持隐藏状态。

这就是我打算解决的问题,在这里提到它是因为我可能会完全走错路~怀疑我是否以正确的方式这样做:'(

现在 - 我正在使用 JS 隐藏所有屏幕的“查看菜单”链接,仅在小于 420 像素的屏幕上显示。我还添加了 resize() 函数以允许更多动态行为。 一切都按预期工作,以显示和隐藏我的菜单 - 但是....

切换链接本身设置为 display:block - 当窗口加载到 420 像素以下时,它会按预期显示:设置为 block(跨越整个宽度以获得良好的实心活动链接),文本居中。 但是,当我以较大的窗口大小加载页面时,然后将其调整为低于 420 像素的宽度 - 切换链接似乎变成了内联?不再全宽,文本似乎左对齐,因为元素不再是全宽...?!

我尝试在 CSS 中设置宽度,尝试通过 resize() 元素重置,通过 JS 分配 100% 宽度...。没有任何效果 - 我确定我错过了一些东西....

我真的很感激任何指示或想法〜感觉我在这里遗漏了一些非常基本的东西......

网站:webeyedea.info

这是我的 JS 代码,链接到 jQuery:

// check for window size size on page load and show relevant content only 
$(function() {
    if ($(window).width() > 420) {
        $('#toggle-nav').hide();
        $('nav ul').show();
    }
    else {
        $('#toggle-nav').show();
        $('nav ul').hide();
    }
});
// check for window resize - show nav again for larger screens after hiding
$(window).resize(function() {
    if ($(window).width() > 420) {
        $('#toggle-nav').hide();
        $('nav ul').show();
    }
    else {
        $('#toggle-nav').show();
        $('nav ul').hide();
    }
});

// show menu (smallest screens)
$('nav #toggle-nav').click(function() {
    $('nav ul').slideToggle('slow', function() {
        // Animation complete.  
    });
    $('ul').addClass('view');
});

更新:见JSFIDDLE

【问题讨论】:

  • 我现在已经用这个设置了一个 jsfiddle,因为它可能更容易看出出了什么问题 - toggle menu 调整窗口大小 - 应用显示内联,从 CSS 覆盖我的显示块- 当窗口以小屏幕尺寸加载时不会发生这种情况...

标签: javascript jquery


【解决方案1】:

当您在元素上调用 .show() 时,它会将 display 属性设置为以前的值,如果它不存在,我相信它会采用默认浏览器值,在您的情况下可能是 inline。尝试将其显式设置为block

【讨论】:

  • 谢谢,安德烈 - 试过了......好吧,我尝试通过 CSS,将宽度设置为显示块 + 甚至添加 100% - 不走运:( 然后我尝试通过将宽度设置为 100% JS - 也不走运 ;(
【解决方案2】:

我不确定这里在做什么,因为我没有手机来测试它,但你能尝试用一个在 display:none 和 display:block 之间切换的 css 函数替换你的 hide/show 吗?

像这样:

$('#toggle-nav').css('display','none');
$('#toggle-nav').css('display','block');

【讨论】:

  • 感谢您回复我,Alexandre - 我认为最好通过 JS 显示和隐藏 - 以确保在 JS 被禁用时菜单仍然可见?
  • Alexandre,啊,...还没有尝试过 - 感谢 sn-p。但它不起作用:(当我替换 y show and hide 为#toggle-nav - 当窗口调整为更大尺寸时菜单再次保持隐藏......
  • 我告诉过你是用那个代码 :P 我不太确定会为你编写整个代码,因为我是在工作中编写的。我知道这是 display: none 和 block :) 享受!
  • Alexandre ~ 感谢您抽出宝贵时间;)非常感谢。抱歉,如果我回复得有点慢,刚开始使用 Stackoverflow - 在这里阅读和学习了很多东西 - 但不习惯发帖 - 还 :)
【解决方案3】:

几乎!未解决

一个解决方案,感谢 Vlad Radulescu(Forrst)~ 通过这个jsfiddle fork

$('a#toggle-nav').css('display','none');

// Show the menu if Window width is less than 420
$(window).resize(function() {
    if ( $(window).width() > 420 ) {                    
        $('#toggle-nav').css('display','none');
        $('nav ul').show();                 
    }
    else {
        $('#toggle-nav').css('display','block');
        $('nav ul').hide();
    }            
});

// Slide the Menu on smaller screens
$('nav #toggle-nav').click(function() {
        $('nav ul').slideToggle('slow');                
});

【讨论】:

  • 哦,我想这就是 Alexandre 的意思,只是他没有提供完整的代码
  • 好吧,它仍然不能正常工作.....多亏了你的提示,我已经成功了一半——但上面的版本在调整窗口大小时可以正常工作——加载窗口时不能正常工作在小屏幕尺寸下,即
  • 我在上面的代码中立即看到的一个问题是 display none 在外部声明,您可能将它放在 >420 所在的第一个函数之后。所以当你开始小于 420 时它会隐藏它
  • 这工作得很好,除了在 iPhone 上根本不能工作之外~我只是使用推荐的代码,没有它尝试过,但它在 FF 中出现故障,所以我把它留在了那里。我会坚持下去 - 必须是可解决的...... :-\
【解决方案4】:

查看我修改后的小提琴 http://jsfiddle.net/HWmp3/9/ 我在 iphone 模拟器上对此进行了测试,它可以工作。我的测试是将代码复制到本地文件并进行测试。我把所有的js放在document.ready里面

确保您在标题中有元数据

<meta name = "viewport" content = "width=device-width, initial-scale=1.0">

【讨论】:

  • 谢谢,Huangism ~ 试过了,它根本没有任何区别...... :( 我真的不明白这一点 - 除了应用内联样式的事实,设置我的链接到内联,快速查看screenshot。如果页面在最小的屏幕上加载 - 没有内联 CSS,一切都很好...... :(
  • 你改变了什么吗?我刚刚检查了 FF 中的网站,当我调整大小时,它显示内联 css 为块,它可以按你的意愿工作
  • 是的,我做到了 - 我一直在努力尝试用各种组合来解决这个问题 - 没有运气......我可以让它在桌面浏览器上工作 - 但切换失败iPhone :(所以仍然没有正常工作的解决方案......
  • Huangism ~ 只是为了报告,现在从你的小提琴中尝试了确切的代码,谢谢。我想我之前确实有过这个版本——在桌面浏览器上一切正常:) 但在 iPhone 上测试时仍然无法正常工作,现在完全坏了(甚至没有发生切换开/关)。感谢您的建议 :) 会继续努力 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2016-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多