• <kbd id="sucug"></kbd>
    技術頻道導航
    HTML/CSS
    .NET技術
    IIS技術
    PHP技術
    Js/JQuery
    Photoshop
    Fireworks
    服務器技術
    操作系統
    網站運營

    贊助商

    分類目錄

    贊助商

    最新文章

    搜索

    純CSS:兩個非常漂亮的checkbox和radio按鈕樣式

    作者:admin    時間:2022-12-6 20:52:28    瀏覽:

    前面介紹過兩例純CSS樣式:單選radio/復選checkbox按鈕,以及使用SVG實現的漂亮的復選框(checkbox)樣式,今天,再給大家介紹兩個非常漂亮的checkboxradio按鈕樣式。

     兩個非常漂亮的checkbox和radio按鈕樣式

    demodownload

    現在完全可以構建自定義復選框checkbox和單選radio按鈕,同時保持語義和可訪問性。我們甚至不需要一行 JavaScript 或額外的 HTML 元素!實際上現在比過去更容易了。讓我們來看看。

    完整HTML

    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">

    <style>
    @supports (-webkit-appearance: none) or (-moz-appearance: none) {
      input[type=checkbox],
    input[type=radio] {
        --active: #275EFE;
        --active-inner: #fff;
        --focus: 2px rgba(39, 94, 254, .3);
        --border: #BBC1E1;
        --border-hover: #275EFE;
        --background: #fff;
        --disabled: #F6F8FF;
        --disabled-inner: #E1E6F9;
        -webkit-appearance: none;
        -moz-appearance: none;
        height: 21px;
        outline: none;
        display: inline-block;
        vertical-align: top;
        position: relative;
        margin: 0;
        cursor: pointer;
        border: 1px solid var(--bc, var(--border));
        background: var(--b, var(--background));
        transition: background 0.3s, border-color 0.3s, box-shadow 0.2s;
      }
      input[type=checkbox]:after,
    input[type=radio]:after {
        content: "";
        display: block;
        left: 0;
        top: 0;
        position: absolute;
        transition: transform var(--d-t, 0.3s) var(--d-t-e, ease), opacity var(--d-o, 0.2s);
      }
      input[type=checkbox]:checked,
    input[type=radio]:checked {
        --b: var(--active);
        --bc: var(--active);
        --d-o: .3s;
        --d-t: .6s;
        --d-t-e: cubic-bezier(.2, .85, .32, 1.2);
      }
      input[type=checkbox]:disabled,
    input[type=radio]:disabled {
        --b: var(--disabled);
        cursor: not-allowed;
        opacity: 0.9;
      }
      input[type=checkbox]:disabled:checked,
    input[type=radio]:disabled:checked {
        --b: var(--disabled-inner);
        --bc: var(--border);
      }
      input[type=checkbox]:disabled + label,
    input[type=radio]:disabled + label {
        cursor: not-allowed;
      }
      input[type=checkbox]:hover:not(:checked):not(:disabled),
    input[type=radio]:hover:not(:checked):not(:disabled) {
        --bc: var(--border-hover);
      }
      input[type=checkbox]:focus,
    input[type=radio]:focus {
        box-shadow: 0 0 0 var(--focus);
      }
      input[type=checkbox],
    input[type=radio] {
        width: 21px;
      }
      input[type=checkbox]:after,
    input[type=radio]:after {
        opacity: var(--o, 0);
      }
      input[type=checkbox]:checked,
    input[type=radio]:checked {
        --o: 1;
      }
      input[type=checkbox] + label,
    input[type=radio] + label {
        font-size: 14px;
        line-height: 21px;
        display: inline-block;
        vertical-align: top;
        cursor: pointer;
        margin-left: 4px;
      }

      input[type=checkbox] {
        border-radius: 7px;
      }
      input[type=checkbox]:after {
        width: 5px;
        height: 9px;
        border: 2px solid var(--active-inner);
        border-top: 0;
        border-left: 0;
        left: 7px;
        top: 4px;
        transform: rotate(var(--r, 20deg));
      }
      input[type=checkbox]:checked {
        --r: 43deg;
      }

      input[type=radio] {
        border-radius: 50%;
      }
      input[type=radio]:after {
        width: 19px;
        height: 19px;
        border-radius: 50%;
        background: var(--active-inner);
        opacity: 0;
        transform: scale(var(--s, 0.7));
      }
      input[type=radio]:checked {
        --s: .5;
      }
    }
    ul {
      margin: 12px;
      padding: 0;
      list-style: none;
      width: 100%;
      max-width: 320px;
    }
    ul li {
      margin: 16px 0;
      position: relative;
    }

    html {
      box-sizing: border-box;
    }

    * {
      box-sizing: inherit;
    }
    *:before, *:after {
      box-sizing: inherit;
    }

    body {
      min-height: 100vh;
      font-family: "Inter", Arial, sans-serif;
      color: #8A91B4;
      display: flex;
      justify-content: center;
      align-items: center;
      background: #F6F8FF;
    }
    @media (max-width: 800px) {
      body {
        flex-direction: column;
      }
    }
    </style>


    </head>

    <body>
      <ul>
      <li>
        <input id="c1" type="checkbox">
        <label for="c1">Checkbox</label>
      </li>
      <li>
        <input id="c2" type="checkbox" checked>
        <label for="c2">Checkbox</label>
      </li>
      <li>
        <input id="r1" type="radio" name="radio" value="1">
        <label for="r1">Radio</label>
      </li>
      <li>
        <input id="r2" type="radio" name="radio" value="2" checked>
        <label for="r2">Radio</label>
      </li>
    </ul>

    <ul>
      <li>
        <input id="c1d" type="checkbox" disabled>
        <label for="c1d">Checkbox</label>
      </li>
      <li>
        <input id="c2d" type="checkbox" checked disabled>
        <label for="c2d">Checkbox</label>
      </li>
      <li>
        <input id="r1d" type="radio" name="radiod" value="1" disabled>
        <label for="r1d">Radio</label>
      </li>
      <li>
        <input id="r2d" type="radio" name="radiod" value="2" checked disabled>
        <label for="r2d">Radio</label>
      </li>
    </ul>

    </body>

    </html>

    下面我們看看這個HTML代碼的實現方法。

    1、HTML設計

    我們可以只用這個 HTML 來設計我們的輸入,沒有什么特別的。

    <!-- Checkbox -->
    <input type="checkbox">

    <!-- Radio -->
    <input type="radio">

    HTML 部分就這些了,當然還是推薦有 nameid 屬性,加上一個匹配的<label>元素:

    <!-- Checkbox -->
    <input type="checkbox" name="c1" id="c1">
    <label for="c1">Checkbox</label>

    <!-- Radio -->
    <input type="radio" name="r1" id="r1">
    <label for="r1">Radio</label>

    2、CSS樣式

    首先,我們檢查appearance: none;的支持,包括它的前綴組成。appearance屬性是關鍵,因為它旨在從元素中刪除瀏覽器的默認樣式。如果不支持該屬性,則不會應用這些樣式,并且會顯示默認輸入樣式。這是漸進增強的一個很好的例子。

    @supports(-webkit-appearance: none) or (-moz-appearance: none) {
      input[type='checkbox'],
      input[type='radio'] {
        -webkit-appearance: none;
        -moz-appearance: none;
      }
    }

    就目前而言,支持的瀏覽器如下(數字表示支持瀏覽器該版本及更高版本):

     

    3、元素交互狀態設計

    在設計元素時,我們會考慮這些交互狀態:

    • :checked
    • :hover
    • :focus
    • :disabled

    例如,以下是我們如何設置checkboxradio的樣式和:checked狀態: 

    input[type=checkbox],
    input[type=radio] {
        --active: #275EFE;
        --active-inner: #fff;
        --focus: 2px rgba(39, 94, 254, .3);
        --border: #BBC1E1;
        --border-hover: #275EFE;
        --background: #fff;
        --disabled: #F6F8FF;
        --disabled-inner: #E1E6F9;
        -webkit-appearance: none;
        -moz-appearance: none;
        height: 21px;
        outline: none;
        display: inline-block;
        vertical-align: top;
        position: relative;
        margin: 0;
        cursor: pointer;
        border: 1px solid var(--bc, var(--border));
        background: var(--b, var(--background));
        transition: background 0.3s, border-color 0.3s, box-shadow 0.2s;
      }
      input[type=checkbox]:after,
    input[type=radio]:after {
        content: "";
        display: block;
        left: 0;
        top: 0;
        position: absolute;
        transition: transform var(--d-t, 0.3s) var(--d-t-e, ease), opacity var(--d-o, 0.2s);
      }
      input[type=checkbox]:checked,
    input[type=radio]:checked {
        --b: var(--active);
        --bc: var(--active);
        --d-o: .3s;
        --d-t: .6s;
        --d-t-e: cubic-bezier(.2, .85, .32, 1.2);
      }

    <input>容器一樣使用元素。input內部的旋鈕是使用::after偽元素創建的,不再需要額外的標記!

    4、自定義CSS屬性

    示例中,添加了一些 CSS 自定義屬性,這是管理樣式表中可重用值的好方法:

    @supports(-webkit-appearance: none) or (-moz-appearance: none) {
      input[type='checkbox'],
      input[type='radio'] {
        --active: #275EFE;
        --active-inner: #fff;
        --focus: 2px rgba(39, 94, 254, .25);
        --border: #BBC1E1;
        --border-hover: #275EFE;
        --background: #fff;
        --disabled: #F6F8FF;
        --disabled-inner: #E1E6F9;
      }
    }

    自定義屬性可以很好地根據元素的狀態更新值!這里不打算做詳細介紹,下面是一個示例,我們可以為不同的狀態使用自定義屬性。

    /* 默認 */
    input[type='checkbox'],
    input[type='radio'] {
      --active: #275EFE;
      --border: #BBC1E1;
      border: 1px solid var(--bc, var(--border));
    }

    /* 覆蓋默認 */
    input[type='checkbox']:checked,
    input[type='radio']:checked {
      --b: var(--active);
      --bc: var(--active);
    }
      
    /* 如果未選中或未禁用,則在懸停時應用另一種邊框顏色 */
    input[type='checkbox']:not(:checked):not(:disabled):hover,
    input[type='radio']:not(:checked):not(:disabled):hover {
      --bc: var(--border-hover);
    }

    5、可訪問性設計

    對于可訪問性,我們應該添加自定義焦點樣式。刪除默認輪廓,因為它不能像我們正在設計的其他東西一樣圓潤。但是 border-radiusbox-shadow 可以形成一種圓形的樣式,就像輪廓一樣。

    input[type='checkbox'],
    input[type='radio'] {
      --focus: 2px rgba(39, 94, 254, .25);
      outline: none;
      transition: box-shadow .2s;
    }

    input[type='checkbox']:focus,
    input[type='radio']:focus {
      box-shadow: 0 0 0 var(--focus);
    }

    也可以對直接跟在<input>后面的的<label>元素進行對齊并設置它的樣式:

    <input type="checkbox" name="c1" id="c1">
    <label for="c1">Checkbox</label>
    input[type='checkbox'] + label,
    input[type='radio'] + label {
      display: inline-block;
      vertical-align: top;
      /* 附加樣式 */
    }

    input[type='checkbox']:disabled + label,
    input[type='radio']:disabled + label {
        cursor: not-allowed;
    }

    6、總結

    由于直接在表單輸入上的偽元素,它需要更少的標記。由于自定義屬性,它需要更少花哨的樣式切換。希望你也學會創建自定義表單樣式。

    相關文章

    標簽: css  checkbox  radio  
    x
    • 站長推薦
    国产成年女人人AA人视频看看-婷婷黄色视频-一女被两男吃奶添下A片免费-欧美黑人又粗又大高潮喷水