【问题标题】:Toggling between 2 CSS sheets在 2 个 CSS 工作表之间切换
【发布时间】:2020-05-26 07:31:25
【问题描述】:

我希望在 2 个 CSS 表之间切换。我的代码几乎可以工作了 - 但它只切换一次,我不确定实现切换的最佳方式,因此我可以来回切换。

我想用一个按钮在“normal.css”和“highContrast.css”之间切换,并在每次更改时更新按钮的文本。

在我的 HTML 中:

  <div class="high">
                <button class="normal" id="myButton" value="Hover" onclick="changeClass('css/highContrast.css', 0)" ">High Contrast Mode</button>
              </div>

在我的 JS 中:

<script>
    function changeClass(cssFile, cssLinkIndex) {

      var oldlink = document.getElementsByTagName("link").item(cssLinkIndex);

      var newlink = document.createElement("link");
      newlink.setAttribute("rel", "stylesheet");
      newlink.setAttribute("type", "text/css");
      newlink.setAttribute("href", cssFile);
      document.getElementsByTagName("head").item(0).replaceChild(newlink, oldlink);

  document.getElementsByClassName("normal").setAttribute("text", "Normal mode");
  var div = document.getElementById ("myButton");
  div.onclick= "changeClass('css/style.css', 0)";

      }
</script>

对我来说,最好的方法是在两个 CSS 文件之间切换,而不是仅将 highContrast.css 作为参数传递?我正在考虑使用 for 循环和 % 2....但我确信有一种更清洁的方法。

另外,更新文本的最后一部分也不起作用。我假设我错误地定位了文本,我可以使用 switch 语句修复它以正确更新,但我不确定如何编写它。

【问题讨论】:

标签: javascript html css dom


【解决方案1】:

您可以根据 myButton 按钮上当前显示的文本来决定选择哪个 css 文件。如果是“高对比度模式”,则使用另一个,反之亦然。

类似:

function changeClass() {
  var text = document.getElementById("myButton").firstChild.data;
  switch (text) {
    case "High Contrast Mode":
      // apply normal mode css

      // switch text on button
      document.getElementById("myButton").firstChild.data = "Normal Mode";
      break;
    case "Normal Mode":
      // apply high contrast mode css

      // switch text on button
      document.getElementById("myButton").firstChild.data = "High Contrast Mode";
      break;
  }
}

【讨论】:

    【解决方案2】:

    比在两个样式表之间切换更可靠的方法是将所有样式都放在一个样式表中。

    document.getElementById("toggleContrastMode").addEventListener("click", function() {
        document.body.classList.toggle("highcontrastmode"); // Add or remove the class.
    });
    body {
      margin: 0;
      background-color: white;
    }
    
    nav {
      width: 100%;
      height: 60px;
      background-color: rgb(160, 160, 160);
    }
    
    body.highcontrastmode {
        background-color: black;
    }
    
    .highcontrastmode nav {
        background-color: rgb(40, 40, 40);
    }
    <nav></nav>
    <button id='toggleContrastMode'>Toggle contrast</button>

    【讨论】:

      猜你喜欢
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多