欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

如何使用帶有首選配色方案的配色方案和自定義主題切換器

林子帆2年前7瀏覽0評論

CSS配色方案屬性是最近引入的(至少對我來說是這樣),我發現一些參考資料(如下所列)提到它是多么有用。但是他們都沒有談到用主題切換器將它們結合在一起的最佳方式。

我的意思是,我想建立一個網站,其中有一個自定義的主題開關按鈕。所以本質上,

在第一次加載時,網站將根據用戶的系統默認主題應用配色方案,然后使用prefers-color-scheme獲得更多樣式。 但是,一旦用戶使用主題切換器改變了主題,偏好就被保存在瀏覽器本地存儲器中,然后用于將來的參考。 所以這里的問題是,一旦用戶使用主題切換器改變網站主題,切換主題或配色方案的最佳方式是什么?雖然這聽起來直截了當,但我認為不是。例如:

如果系統主題是暗的,用戶使用主題切換器切換到亮的,那么畫布的配色方案仍然是暗的,但網站主題將是亮的,這將會不匹配。下面的代碼片段顯示了一個例子。 現在,請注意,我知道我可以設置文本顏色來根據主題進行切換。但是:

如果我這樣做了,那么為什么我首先需要使用配色方案呢? 更重要的是,改變表單元素的風格尤其是一個挑戰——我希望配色方案能解決這個問題。

let i = 1
let j = 1;

function ToggleTheme() {
  // console.log("Toggle Theme");
  i *= -1
  document.body.dataset.theme = i == 1 ? "light" : "dark"
}

function ToggleAllForm() {
  j *= -1;
  document.getElementById("allForm").style.display = j == 1 ? "none" : ""
}

body[data-theme='light'] {
  background-color: black;
}

body[data-theme='dark'] {
  background-color: white;
}

<head>
  <meta name="color-scheme" content="dark light">
</head>

<body data-theme="light">
  <button onclick="ToggleTheme()">Toggle Theme</button>
  <h1>Color-Scheme</h1>
  <form action="/action_page.php">
    <label for="fname">First name:</label><br>
    <input type="text" id="fname" name="fname" value="John"><br>
    <label for="lname">Last name:</label><br>
    <input type="text" id="lname" name="lname" value="Doe"><br><br>
    <input type="submit" value="Submit">
  </form>


  <hr>
  <br>
  <h1>All Form Elements</h1>
  <button onclick="ToggleAllForm()">Toggle All Form</button>
  <form id="allForm" style="display: none;">
    <div>
      <p>
        <label>
      text<br>
    <input type="text">
    </label>
      </p>
      <p>
        <label>
      password<br>
    <input type="password">
    </label>
      </p>
      <p>
        <label>
      number<br>
    <input type="number">
    </label>
      </p>
      <p>
        <label>
      email<br>
    <input type="email">
    </label>
      </p>
      <p>
        <label>
      url<br>
    <input type="url">
    </label>
      </p>
      <p>
        <label>
      tel<br>
    <input type="tel">
    </label>
      </p>
      <p>
        <label>
      search<br>
    <input type="search">
    </label>
      </p>
      <p>
        <label>
      textarea<br>
      <textarea></textarea>
    </label>
      </p>
      <p>
        <label>
      date<br>
    <input type="date">
    </label>
      </p>
      <p>
        <label>
      datetime<br>
    <input type="datetime">
    </label>
      </p>
      <p>
        <label>
      datetime-local<br>
    <input type="datetime-local">
    </label>
      </p>
      <p>
        <label>
      month<br>
    <input type="month">
    </label>
      </p>
      <p>
        <label>
      week<br>
    <input type="week">
    </label>
      </p>
      <p>
        <label>
      time<br>
    <input type="time">
    </label>
      </p>
      <p>
        <label>
      select<br>
      <select>
        <optgroup label="optgroup">
          <option>option 1</option>
          <option>option 2</option>
          <option>option 3</option>
        </optgroup>
      </select>
    </label>
      </p>
      <p>
        <label>
      select (multiple attr)<br>
      <select multiple>
        <optgroup label="optgroup">
          <option>option 1</option>
          <option>option 2</option>
          <option>option 3</option>
        </optgroup>
      </select>
    </label>
      </p>
      <p>
        <label>
      select (size attr)<br>
      <select size="4">
        <optgroup label="optgroup">
          <option>option 1</option>
          <option>option 2</option>
          <option>option 3</option>
        </optgroup>
      </select>
    </label>
      </p>
      <p>
        <label>
      datalist<br>
      <input list="datalist">
      <datalist id="datalist">
        <option value="option 1">
        <option value="option 2">
        <option value="option 3">
      </datalist>
    </label>
      </p>
      <p>
        <label>
      keygen<br>
      <keygen>
    </label>
      </p>
      <p>
        <label>
      output<br>
      <output>123</output>
    </label>
      </p>
      <p>
        <label>
      radio<br>
    <input type="radio">
    </label>
      </p>
      <p>
        <label>
      checkbox<br>
    <input type="checkbox">
    </label>
      </p>
      <p>
        <label>
      color<br>
    <input type="color">
    </label>
      </p>
      <p>
        <label>
      range<br>
    <input type="range">
    </label>
      </p>
      <p>
        <label>
      file<br>
    <input type="file">
    </label>
      </p>
      <p>
        <label>
      submit<br>
    <input type="submit">
    </label>
      </p>
      <p>
        <label>
      reset<br>
    <input type="reset">
    </label>
      </p>
      <p>
        <label>
      button (input tag)<br>
    <input type="button" value="Button">
    </label>
      </p>
      <p>
        <label>
      button (button tag)<br>
      <button>Button</button>
    </label>
      </p>
    </div>
    <fieldset>
      <legend>legend</legend>
      fieldset
    </fieldset>
  </form>
</body>