如何使 HTML 元素仅在特定屏幕尺寸下可点击

How can I make an HTML element clickable only at certain screen sizes

我正在尝试将旧的 custom-built 网站转换为响应式网站。我已经完成了大部分 CSS 工作,并且可以获得我想要的大部分尺寸和位置。最后一首曲子让我很伤心。

我在页面上显示了一系列新闻文章。当我转到移动 phone-size 显示时,我真的希望这些标题变成 "clickable" 以便我可以将它们用于 show/hide 文章的详细信息。但我不希望这些标题在更大的屏幕尺寸下可以点击。

每篇文章的基本布局是...

<article id="article-001">
    <div class="newsArticleTitle">Title goes here</div>
    <div class="newsArticleTeaser">
        <p>
            Teaser paragraph</p>
    </div>
    <div class="newsArticleContent">
        <p>
            Paragraph 1</p>
        <p>
            Paragraph 2</p>
    </div>
</article>

随着屏幕尺寸的缩小,控制这些文章显示的相关 CSS 是...

@media only screen and (max-width: 479px) {
    .newsArticleTeaser {
        display: none;
    }
}


@media only screen and (max-width: 319px) {
    .newsArticleContent {
        display: none;
    }
}

...因此在最窄的屏幕尺寸下,只有文章标题可见。然后我 need/want 该文章标题(div 和 class="newsArticleTitle")然后成为可点击的项目,以便切换预告片和内容的可见性。

有没有一种明智的方法可以做到这一点?我的后备方法可能是复制标题元素 - 一次用 <a> 标签包裹它,一次没有 - 并用 CSS 切换这两个元素的可见性。不过感觉不对。

有没有人更优雅地解决了这个问题,或者对更好的设计方法有任何建议?

您可以将 css 属性 pointer-events: none 与媒体查询结合使用:

.elementToClickInMobile {
    pointer-events: none;
    @media all and (max-width: 460px) {
        pointer-events: all
    }
}

这将防止在比 460px

更大的屏幕上发生任何点击事件

编辑// 正如正确建议的那样,这有效 >IE10

您可以使用旧版(过时的)浏览器的回退

$("elementToClick").click(function(e){
    var outerWidth = window.outerWidth
    if (outerWidth > 480) {
        e.preventDefault(); //for browsers
        e.returnValue = false; //for IE
        return false
    }
});

JS 未测试,请随时评论进一步的建议!

EDIT2// 找到了 IE7+ 指针事件的巧妙回退,包括 preventClick() 方法! https://github.com/vistaprint/PointyJS

如果支持旧版本 (<11) 的 Internet Explorer 对您来说不是问题,那么您可以单独使用 CSS,使用 pointer-events 属性 和媒体查询:

@media all and (min-width:600px){
    h1{
        pointer-events:none;
    }
}

如果您喜欢通过脚本执行此操作,您可以查看 window.innerWidth;

onclick = function() {
...
if(checkScreenSize()) {
    alert("Your screen is small!");
    ....
}
...
}

function checkScreenSize(){
    return window.innerWidth < 300; //The screen size you would like to enable the click;
}

参考link.

希望对您有所帮助!

您正在寻找这样的东西吗?这使用 JQuery 将相关的 .newsArticleContent 切换为在单击标题时显示。您可以像这样在 CSS 上进行测试,因为 .newsArticleContent 在适当的屏幕尺寸下设置为 display:none。您可以查看 .toggle() 函数以再次单击标题以 re-hide 内容。

    if ($(".newsArticleContent").css("display") == "none") {
        $(".newsArticleTitle").bind("click", function(){
            $(this).siblings(".newsArticleContent").show();
        });
    }

是的,如果您不必考虑 IE10,下面的方法是最好的方法。

.elementToClickInMobile {
    pointer-events: none;
    @media all and (max-width: 460px) {
        pointer-events: all
    }
}

您还可以使用 window.innerWidth 检查视口的大小。注意不要使用window.outerwidth,因为它获取的是浏览器外部的宽度window。它表示整个浏览器的宽度 window,包括边栏(如果展开)、window chrome 和 window 调整大小 borders/handles。