【发布时间】:2019-12-04 05:06:50
【问题描述】:
出于多种原因(例如 noscript 浏览器插件),对于我当前的项目,我正在尝试使网站在没有客户端 javascript 的情况下运行。但是对于 javascript 可以创造附加值(例如可折叠内容)的情况,我会提供它。所以关闭js的用户会看到一个丑陋的页面,但可以访问所有内容。
因此,在 html 中我不能使用任何类,例如隐藏一个稍后将由 js 修改的元素。所以我的尝试(代码 sn-p 1)是首先显示所有内容,然后通过 js 将类添加到我想要操作的元素中。这行得通,但是因为 js 需要一些时间来加载和一些额外的时间来工作,所以在加载页面时会有一个短暂的故障,所以你基本上可以看到 js 是如何隐藏之前显示的元素的。 所以我想知道这是否是我必须忍受的事情,或者是否有解决方法?也许有标签的东西?例如。 noscript 标记内的样式标记,它将覆盖隐藏类(代码 sn-p 2)?
<div class="container">
<div class="head">
Topic 1 <button>+</button>
</div>
<div class="content">
abc
</div>
<div>
<div class="container">
<div class="head">
Topic 2 <button>+</button>
</div>
<div class="content">
abc
</div>
<div>
document.querySelectorAll(".container").forEach(el => {el.classList.add("contentHidden")});
------------ 或 ------------
<noscript>
<style>
.container.contentHidden>content {
display: initial;
}
</style>
</noscript>
<div class="container contentHidden">
<div class="head">
Topic 1 <button>+</button>
</div>
<div class="content">
abc
</div>
<div>
<div class="container contentHidden">
<div class="head">
Topic 2 <button>+</button>
</div>
<div class="content">
abc
</div>
<div>
【问题讨论】:
-
请注意,任何在禁用 js 的情况下运行的人都习惯于无法按预期工作的网站,因为没有多少网站会提供回退,而如今 js 运行得如此之多。但还要注意,某些浏览器不支持显示的 js。箭头函数、classList、NodeList.forEach 等
-
@charlietfl 感谢您的评价。不可靠的浏览器支持是我想让它基本上在没有 js 的情况下工作的另一个原因。这样我就可以使用最适合的 forEach 之类的东西,当浏览器不支持它时,用户只会看到后备解决方案。我猜这当然不适用于
-
但是你可以写js,所以启用js的时候支持跨浏览器。或者编译它并添加 polyfill。支持的方法和禁用的js是有区别的……前者会抛出错误……后者就是不会运行它
-
@charlietfl 这就是我想说的,但感谢您的澄清
-
@Matt 感谢您分享您的经验。让我对“颤抖”,预加载器等事情感到沮丧的是,它会影响打开 js 并功能齐全的“普通”用户。对于使用 noscript 或浏览器不好的用户,我认为产生一些负面影响是可以的,但这样 js 用户必须为 noscript-users 付费
标签: javascript php html css