1. 程式人生 > >表單自定義樣式

表單自定義樣式

部分 鼠標滑過 獲取 四種 post click rst awesome -m

總結自定義表單樣式的控件,涉及到一些css偽類偽元素知識

css組合選擇符

css組合選擇符在自定義表單控件中扮演著連接的作用,便於控制元素樣式,css3中有四種組合選擇符。

後代選擇器 :以空格分離,選擇後代相匹配的元素;#div p 選擇的是#div下所有的p元素

子元素選擇器 :以大於號分離,選擇子元素相匹配的元素;#div>p 選擇的是#div下直接子元素為p元素

相鄰兄弟選擇器 :以加號分離,選擇緊接的元素,二者有相同父級,#div+p選擇的是#div相鄰的p,只是第一個,因為第一個相鄰的

後續兄弟選擇器 :以波浪線分離,選擇所有相鄰兄弟元素,都有相同的父級,#div~p 選擇的是#div相鄰的所有的p元素

偽類和偽元素

偽類 通過選擇器找到不存在DOM樹中的信息以及一些css選擇器獲得不到的信息,一般用冒號開頭

常見的偽類

  anchors偽類                                           
a:link //未訪問的鏈接
a:visited //已訪問的鏈接
a:hover //鼠標滑過的鏈接
a:active //已選中的鏈接
?
css-偽類
:first-child //元素的第一個子元素
:last-child //元素的最後一個子元素
:nth-child(n) //元素的第n個子元素
:first-letter //常用作文本,選擇元素的第一個字母
:first-line //常用作文本,選擇元素的第一行
:checked //選中的表單元素,比如radio Checkbox option
:disabled //禁用的表單元素
:focused //元素輸入後具有焦點的元素

偽元素 在DOM樹中創建一些抽象的元素,不存在與文檔語言中,css為區分偽類和偽元素,偽元素為::

常見的偽元素有

  ::before 作為元素的第一個子節點插入DOM中
  ::after 作為元素的左右一個子節點插入DOM中  //常常與content相匹配生成內容,這裏content有點意思,後面詳細說

label標簽

此標簽表示用戶界面中項目的標題,是內聯元素inline,通常關聯表單控件,或者放入其中

  //直接嵌套型
  <label>click <input type=‘text‘ id=‘user‘ name=‘username‘></label>
  //
for綁定id型 <label for=‘user‘>click</label> <input type=‘text‘ id=‘user‘ name=‘username‘>

除了綁定這些控件,還搭配選擇組

optgroup

<optgroup label=‘fruit‘>

自定義控件樣式的實現

主要原理:

  • 隱藏原生的input控件

  • 使用label,對label添加樣式,使其代替原來的控件

因為,label可以關聯到所指定的控件,因而既可以為label添加樣式,顯示出控件樣子;又可以使checkbox有原來的動態(即單選、多選)

雪碧圖和圖標字體

雪碧圖

css圖像合成技術,主要用來弄小圖標的,雪碧圖直接合成在一張圖片上;作用:減少過多的文件請求,減少http請求。

圖標字體

font-awesome

代碼部分

方法一: 利用checked和:after

HTML結構

  <div id="first">
        Checkbox控件<br>
        <input type="checkbox" name="box" id="box1">
        <label for="box1"></label>
        <input type="checkbox" name="box" id="box2">
        <label for="box2"></label>
        <input type="checkbox" name="box" id="box3">
        <label for="box3"></label><br>
        radio控件<br>
        <input type="radio" name="radios" id="radio1">
        <label for="radio1"></label>
        <input type="radio" name="radios" id="radio2">
        <label for="radio2"></label>
  </div>

CSS樣式

     //隱藏原來的input控件
     #first input{     
        display:none;
     }
     /*checkbox  設置label*/
     #first input[type=‘checkbox‘]+label{    
        width:16px;
        height:16px;
        display:inline-block;
        border:1px solid #d9d9d9;
     }
     /*:checked後*/
     #first input[type=‘checkbox‘]:checked+label:after{
        content:‘\2714‘;                   /*這裏的content內容有點意思,另一篇文章中再總結*/
        color:red;
        width:8px;
        height:8px;
        line-height:8px;
        text-align:center;
        font-size:20px;
     }
     /*radio   設置label*/
     #first input[type=‘radio‘]+label{     
        width:16px;                       
        height:16px;
        display:flex;                     /*這裏必須用flex布局,radio的label中的點才會出現*/
        border:1px solid #d9d9d9;
        border-radius:50%;
     }
     /*:checked後*/
     #first input[type=‘radio‘]:checked+label::after{
        border-radius: 50%;
              width: 8px;
              height: 8px;
              line-height: 8px;
              content: ‘‘;
              margin:auto;
              background: #d73d32;
     }
     /*:checked的input的邊框變化*/
     #first input:checked+label{
        border:1px solid #d73d32;
     }

方法二: 直接利用雪碧圖定位獲取

css樣式

      /*為所有的label設置寬高 背景*/
      #fisrt input+label{
          width: 16px;
          height:16px;
          border:none;
          display: inline-block;
          background:url(‘bg.png‘) no-repeat;
      }   
      /*利用雪碧圖定位一開始的CheckBox radio背景*/
      #first input[type=‘checkbox‘]+label{
         background-position:-25px -32px;
      }
      #first input[type=‘radio‘]+label{
          background-position: -24px -10px;
      }
      /*利用雪碧圖定位選中後的CheckBox radio背景*/
      #first input[type=‘checkbox‘]:checked+label{
          background-position: -60px -32px;
      }
      #first input[type=‘radio‘]:checked+label{
          background-position: -59px -10px;
      }

總結

兩種方法都是通過設置label的樣式代替原生的樣式;前者是利用:before,:after來添加內容;後者是利用圖片直接添加;這個過程都利用:checked觸發動作而生成。

歡迎訪問我的個人網站:博客地址

表單自定義樣式