【问题标题】:How to make a website work with and without javascript如何使网站在使用和不使用 javascript 的情况下工作
【发布时间】: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


【解决方案1】:

如何使用隐藏元素的 CSS 动画

@keyframes hidefirst {
    from {visibilty: hidden;}
    to {visibilty: visible;}
}
.hide {
    animation-name: hidefirst;
    animation-duration: 10000ms;
    animation-iteration-count: 1;
} 
.permhide {
    visibilty: hidden;
} 

然后使用Javascript从临时隐藏类更新为永久隐藏类。

let hidden = document.getElementsByClassName('hide');

hidden. foreach(
    element => element.className = 'permhide' ) 

【讨论】:

  • 这是一个非常有趣的方法。您自己使用过或在某处看到过,还是只是一个想法?
  • 只是一个想法。你的问题让我思考,这是我能想到的唯一选择。
猜你喜欢
  • 2015-04-14
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
相关资源
最近更新 更多