css偽元素用法大全


本文主要講解css偽元素的用法,有需要的朋友可以閱讀此文。本文講解的偽元素有:before,after.

 

什么是偽元素(Pseudo element)?

偽元素不是真正的元素,不存在與文檔之中,所以js無法操作他。那為什么叫他“元素”?因為我們可以對其進行跟元素幾乎無差別的操作。

偽元素有哪些?

before,after,first-letter,first-line。

我們為什么需要偽元素?

偽元素是創造關於文檔語言能夠指定的文檔樹之外的抽象。例如文檔語言不能提供訪問元素內容第一字或者第一行的機制。偽元素允許設計師引用它們,否則這是難以辦到的。偽元素還提供樣式設計師給在源文檔中不存在的內容分配樣式(例如::before和:after能夠訪問產生的內容)——百度百科。

 

怎樣表示偽元素?最好使用雙冒號,防止與偽類混淆。

hey::before{
    }
hey::after{
}

 

    before與after的用法總結

before定位的基准是其主元素的右上角,after定位的基准是主元素的結尾處。當主元素沒有內容時before與after仍會正常工作,屬性為inline元素,若需要設置高寬度等屬性需要display:block;。

  

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    p{
    border:1px red solid;
    }
        p:before{content: "hey ";
        position: relative;
        left: 20px;}
        p:after{content: "you are handsome!";
        position: relative
        left:20px;
        }
    </style>
</head>
<body>
     <p>安靜!</p>
</body>
</html>

content是偽元素必需的屬性,其內容可以分為幾類:字符串/attr/url/counter(計算器)。若偽元素沒有內容,需賦值為空格:content:' ';

 <h2></h2>
    <h2></h2>
    <style>
        body {counter-reset:section;}
        h2:before { 
            counter-increment: section; 
            content: "Chapter"  counter(section) ".";
        }
    </style>

 

    before與after的主要用途是對元素默認樣式的的美化:美化時需要結合定位於內容。一般講主元素設置為position:relative,偽元素設置為position:absolute,以方便對偽元素定位。

  a {
    position: relative;
    display: inline-block;
    outline: none;
    text-decoration: none;
    color: #000;
    font-size: 32px;
    padding: 5px 10px;
    }

    a:hover::before, a:hover::after { position: absolute; }
    a:hover::before { content: "\5B"; left: -20px; }
    a:hover::after { content: "\5D"; right:  -20px; }

 更多效果點這里:這里這里

 

    對checkbox/radio美化:

    .magic-checkbox {
          position: absolute;
          display: none;  //先隱藏真正的checkboxbox
     }
     .magic-checkbox + label {//為與checkbox搭配的label使用樣式
          position: relative; //相對定位,方便其內容的偽元素進行定位
          display: block; //塊元素
          padding-left: 30px;
          cursor: pointer;
          vertical-align: middle; 
     }
    .magic-checkbox + label:before { //label添加:before偽元素,用於生成一個帶邊界的正方形,模擬復選框的輪廓
            position: absolute;
            top: 0;
            left: 0;
            display: inline-block;
            width: 20px;
            height: 20px;
            content: '';
            border: 1px solid #c0c0c0; 
            border-radius: 3px; 
        }
        //為checkbox添加:after偽元素,作用是生成一個√圖形,模擬checkbox選中狀態,未選中狀態下會被隱藏
        .magic-checkbox + label:after {
              top: 2px;
              left: 7px;
              box-sizing: border-box;
              width: 6px;  //實現√圖形很簡單:設置一個長方形,去掉其上邊界和左邊界,剩下的2個邊界旋轉45度就得到√形狀
              height: 12px;
              transform: rotate(45deg);
              border-width: 2px;
              border-style: solid;
              border-color: #fff;
              border-top: 0;
              border-left: 0;
              position: absolute;
              display: none; //√形狀先隱藏
              content: '';
          }
        //單擊label,隱藏的checkbox為checked狀態,這時設置checked狀態下搭配label的:before偽元素背景和邊界顏色
         .magic-checkbox:checked + label:before {
                animation-name: none; 
                border: #3e97eb;
                background: #3e97eb; 
            }
        //checked狀態的checkbox搭配的label偽元素:after此時設置顯示,那么√就顯示出來了
         .magic-checkbox:checked + label:after {
              display: block; 
         }

    實際效果點擊:這里這里

 

    利用:after屬性還可以對主元素進行批注:

 

   .empty__bg {
            display: inline-block;
            width: 95px;
            height: 92px;
            background: url(http://7tszky.com1.z0.glb.clouddn.com/FvD_sYY4Fmp_yKS0E07H-5jhuKTB) no-repeat;
            background-size: 95px 92px;
            position: relative;
            margin-bottom: 16px;/*注意這里需要留好位置放置after元素(它是absolute進去的)*/
        }
        .empty__bg:after {
            content: "暫無學習計划";
            display: block;
            font-size: 14px;
            line-height: 24px;
            text-align: center;
            width: 100%;
            color: #909090;
            position: absolute;
            top: 100%;
            left: 0;
        }
    }

 

 

 

 參考文章:

騰訊前端

國外大神

 

如需轉載請注明文章出處:http://www.cnblogs.com/lflj/

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM