javascript - 为什么我的页面加载时没有任何 CSS?

标签 javascript html css

所以这个问题已经困扰我好几天了。我一直在尝试在我的网站上启用夜间模式开关。在我认为是解决方案之前和之后,我都在这里询问过,使用来自该站点的帮助和堆栈交换,我开始遇到一个烦人的问题。

这是我的问题的视频:https://ryan-simms.com/problem

该问题仅在启用夜间模式时出现,我不明白实际问题是什么。我尝试过各种不同的 JavaScript 代码,每次都得到相同的结果。此外,在有人说这是因为 DOMContentLoaded 位之前,我已经尝试删除它,只在我的按钮上添加 EventListeners 时使用它。

我还尝试使用几种不同的方法来改变 getCookie() 的工作方式。

cookies 是正确的方法还是有更好的方法?

这是我的 HTML 精简版:

<!DOCTYPE html>


<html lang="en">

    <head>

    <meta charset="utf-8"/>

  <title>Ryan Simms</title>

<link id ="pageStyle" rel="stylesheet" href='css/lightStyle.css' type='text/css'>
<script src="scripts/lightSwitch.js"></script>
<script src="scripts/cookie.js"></script>
<link rel='stylesheet' href='https://fonts.googleapis.com/css?family=Roboto' type='text/css'>


    </head>

    <body>
    <script src="lightSwitch.js"></script> <!-- Loads LightSwitch Script -->

  <button type="button" id="lightSwitchOn">Turn On Night Mode</button>
  <button type="button" id="lightSwitchOff">Turn Off Night Mode</button>

    </body>

</html>

这是我的 JavaScript:

document.addEventListener("DOMContentLoaded", handleDocumentLoad);

function handleDocumentLoad() {

  var style = document.getElementById("pageStyle");
  var offSwitch = document.getElementById("lightSwitchOff");
  var onSwitch = document.getElementById("lightSwitchOn");

  offSwitch.addEventListener('click', lightsOn);
  onSwitch.addEventListener('click', lightsOff);

  function lightsOff() {
    document.cookie = "lights = off;  expires = Fri, 31 Dec 9999 23:59:59 GMT";
    style.setAttribute('href', 'css/darkStyle.css');
  }

  function lightsOn() {
    document.cookie = "lights = on;  expires = Fri, 31 Dec 9999 23:59:59 GMT";
    style.setAttribute('href', 'css/lightStyle.css');
  }

  function getCookie( name ) {
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    var end = null;
    if (begin == -1) {
        begin = dc.indexOf(prefix);
        if (begin != 0) return null;
        end = document.cookie.indexOf(";", begin);
    } else {
        begin += 2;
        end = document.cookie.indexOf(";", begin);
        if (end == -1) {
            end = dc.length;
        }
    }

    return decodeURI(dc.substring(begin + prefix.length, end) ).replace(/"/g, '');
} 


  function checkCookie() {
    var nightmode = getCookie("lights");
    if (nightmode == "off") {
      lightsOff();
    } else {
      lightsOn();
    }
  }

  checkCookie();
 }

这是我的默认 CSS:

/*Layout for phones and tablets e.g. iPhone 5 and iPad*/

    /*webpage fades in*/
    html {
        animation: fadein 2s;
        position: relative;
        min-height: 100%;
    }

    /*animation*/
    @keyframes fadein {
        from { opacity: 0; }
        to { opacity: 1; }
    }

    /*main colour settings for page*/
    body {
        font-family: 'Roboto';
        font-size: 22px;
        color: #1C1C1C;
        background-color: #FFF;
        margin: 0 0 100px;
        padding: 25px;
    }

    /*List in nav*/
    li {
        list-style-type: none;
        display: inline;
    }

    /*Navigation*/
    nav {
        width: 100%;
        background-color: #D8D8D8;
        padding-top: 10px;
        padding-bottom: 10px;
    }

    ol {
        text-align: center;
        margin-right: 10px;
    }

    /*Links*/
    a, a:link, a:visited, a:hover {
        color: #1C1C1C;
        text-decoration: none;
    }

    /*Main heading*/
    h1 {
        position: relative;
        margin: 0 auto;
        text-align: center;
    }

    /*Images*/
    img {
        border: solid 0px #1C1C1C;
        border-radius: 5px;
        margin: 0 auto;
        text-align: center;
    }

    label {
        display: block;
        margin-bottom: 10px;
        margin-top: 10px;
    }

    textarea {
        width: 300px;
        height: 200px;
        margin-bottom: 10px;
        padding: 10px;
        border: solid 1px #1C1C1C;
        border-radius: 2px;
        resize: none;
    }

    input {
        border: solid 1px #1C1C1C;
        border-radius: 2px;
        padding: 5px;
    }

    #logo {
        border: 0px;
        display: inline;
        position: absolute;
        top: 40px;
        left: 30px;
        margin-left: 10px;
        font-size: 40px;
    }

    #enter {
        margin-top: 40px;
        max-width: 90%;
        max-height: 90%;
    }

    video {
        max-width: 80%;
        margin: 0 auto;
        display: block;
    }

    /*Footer*/
    footer {
        position: absolute;
        left: 0;
        bottom: 0;
        height: 100px;
        width: 100%;
        overflow: hidden;
        text-align: center;
    }

    /*Main Body*/
    #mainContent {
        padding: 10px;
        background-color: #D8D8D8;
        margin-top: 10px;
    }

    #mainContent img {
        display: inline;
        max-width: 375px;
        max-height: 375px;
        float: right;
        margin-right: 10px;
        margin-left: 10px;
    }

    /*Light Switches*/
    #lightSwitchOn {
        display: inline;
        position: absolute;
        top: 40px;
        right: 30px;
        margin-right: 10px;
        font-size: 40px;
    }

    #lightSwitchOff {
        display: none;
        position: absolute;
        top: 40px;
        right: 30px;
        margin-right: 10px;
        font-size: 40px;
    }

    #cookies {
        position: fixed;
        left: 0;
        bottom: 0;
        height: 8%;
        width: 100%;
        background-color: #D8D8D8;
        padding-left: 30px;
    }

/*Layout for device with a min-width of 1024px*/
@media only screen and (min-width: 1024px) {

    #enter {
        max-width: 60%;
        max-height: 60%;
    }
}

/*Layout for desktop with a min-width of 1280px (720p HD)*/
@media only screen and (min-width: 1280px) {

    #enter {
        max-width: 40%;
        max-height: 40%;
    }
}

/*Layout for desktop with a min-width of 1920px (1080p HD)*/
@media only screen and (min-width: 1920px) {

    #enter {
        max-width: 40%;
        max-height: 40%;
    }
}

启用夜间模式时我的 CSS:

/*Layout for phones and tablets e.g. iPhone 5 and iPad*/

    /*webpage fades in*/
    html {
        animation: fadein 2s;
        position: relative;
        min-height: 100%;
    }

    /*animation*/
    @keyframes fadein {
        from { opacity: 0; }
        to { opacity: 1; }
    }

    /*main colour settings for page*/
    body {
        font-family: 'Roboto';
        font-size: 22px;
        color: #FFF;
        background-color: black;
        margin: 0 0 100px;
        padding: 25px;
    }

    /*List in nav*/
    li {
        list-style-type: none;
        display: inline;
    }

    /*Navigation*/
    nav {
        width: 100%;
        background-color: #1C1C1C;
        padding-top: 10px;
        padding-bottom: 10px;
    }

    ol {
        text-align: center;
        margin-right: 10px;
    }

    /*Links*/
    a, a:link, a:visited, a:hover {
        color: #FFF;
        text-decoration: none;
    }

    /*Main heading*/
    h1 {
        position: relative;
        margin: 0 auto;
        text-align: center;
    }

    /*Images*/
    img {
        max-width: 100%;
        max-height: 100%;
        border: solid 0px #FFF;
        border-radius: 5px;
        margin: 0 auto;
        text-align: center;
    }

    label {
        display: block;
        margin-bottom: 10px;
        margin-top: 10px;
    }

    textarea {
        max-width: 100%;
        max-height: 100%;
        width: 300px;
        height: 200px;
        margin-bottom: 10px;
        padding: 10px;
        border: solid 1px #FFF;
        border-radius: 2px;
        resize: none;
    }

    input {
        border: solid 1px #FFF;
        border-radius: 2px;
        padding: 5px;
    }

    #logo {
        border: 0px;
        display: inline;
        position: absolute;
        top: 40px;
        left: 30px;
        margin-left: 10px;
        font-size: 40px;
    }

    #enter {
        margin-top: 40px;
        max-width: 90%;
        max-height: 90%;
    }

    video {
        max-width: 80%;
        margin: 0 auto;
        display: block;
    }

    /*Footer*/
    footer {
        position: absolute;
        left: 0;
        bottom: 0;
        height: 100px;
        width: 100%;
        overflow: hidden;
        text-align: center;
    }

    /*Main Body*/
    #mainContent {
        padding: 10px;
        background-color: #1C1C1C;
        margin-top: 10px;
    }

    #mainContent img {
        display: inline;
        max-width: 375px;
        max-height: 375px;
        float: right;
        margin-right: 10px;
        margin-left: 10px;
    }

    /*Light Switches*/
    #lightSwitchOn {
        display: none;
        position: absolute;
        top: 40px;
        right: 30px;
        margin-right: 10px;
        font-size: 20px;
    }

    #lightSwitchOff {
        display: inline;
        position: absolute;
        top: 40px;
        right: 30px;
        margin-right: 10px;
        font-size: 20px;
    }

    #cookies {
        position: fixed;
        left: 0;
        bottom: 0;
        height: 8%;
        width: 100%;
        background-color: #1C1C1C;
        padding-left: 30px;
    }

/*Layout for device with a min-width of 1024px*/
@media only screen and (min-width: 1024px) {

    #enter {
        max-width: 60%;
        max-height: 60%;
    }
}

/*Layout for desktop with a min-width of 1280px (720p HD)*/
@media only screen and (min-width: 1280px) {

    #enter {
        max-width: 40%;
        max-height: 40%;
    }
}

/*Layout for desktop with a min-width of 1920px (1080p HD)*/
@media only screen and (min-width: 1920px) {

    #enter {
        max-width: 40%;
        max-height: 40%;
    }

最佳答案

Are cookies the right way or is there a better way?

因为你不关心服务器端的cookie,所以更喜欢localStorage .你可以用类似的东西替换你所有的 cookie 代码

localStorage.setItem('lights', 'off');

if(localStorage.getItem('lights') === 'off') { ... }

与其为夜间模式加载新的样式表,不如考虑将 .dark 类添加到您的 body 中(如果夜间模式已打开),并在您的 main 中进行适当的更改样式表。

body {
    font-family: 'Roboto';
    font-size: 22px;
    color: #1C1C1C;
    background-color: #FFF;
    margin: 0 0 100px;
    padding: 25px;
}

body.dark {
    color: #FFF;
    background-color: black;
}

/*Navigation*/
nav {
    width: 100%;
    background-color: #D8D8D8;
    padding-top: 10px;
    padding-bottom: 10px;
}

.dark nav {
    background-color: #1C1C1C;
}

关于javascript - 为什么我的页面加载时没有任何 CSS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47841643/

相关文章:

javascript - Ionic 2 - 使用参数在页面之间导航(空白应用程序)

html - 对齐行内元素背景的顶部

php - 即使浏览器的当前网址已更改,如何创建不可更改的 html 部分?

javascript - 如何在鼠标移出或悬停停止时停止图像切换

javascript - 获取未知图像的大小并更改类别

javascript - 将图像文件添加到 JSON 对象并以 HTML 显示?

javascript - Mongoose findByIdAndUpdate 不更新数据

javascript - 为什么我的 Mocha Reporter 会重复报告测试?

javascript - 如何动态地将相同大小和位置的图像放置在另一个 div 上?

css - 覆盖 CSS 文件