用CSS來製作圖示

lixinfang101發表於2018-01-23

想知道如何利用CSS來製作圖示嗎?並且只使用一個標籤的情況下,不能使用偽元素哦!

在利用CSS製作圖示時,經常用到border邊框,所以,先看看邊框的相關知識。

1.藏在border中的不能說的祕密

<style>
    .box{
        width:100px;
        height:100px;
        border-top:10px solid red;
        border-right:10px solid blue;
        border-bottom:10px solid yellow;
        border-left:10px solid green;
    }
</style>
<body>
    <div class="box"></div>
</body>
複製程式碼

執行結果如下:

用CSS來製作圖示

從執行結果可以看出,每個邊框是個梯形,那麼我們把寬度和高度都設定為0,會怎麼樣吶?

用CSS來製作圖示

從上圖中,可以看出,四個邊框都變成了三角形,那麼如果將左,右,下的邊框都設定為透明(transparent),那麼就顯示了一個下三角。

用CSS來製作圖示

在使用邊框的問題上,我們也遇到過一些問題,例如:

用CSS來製作圖示

從上圖可以發現,第二個選單和第三個選單的左邊框不正確,其原因是,前一個元素的右邊框和後一個元素的左邊框疊加在了一起。想要解決這個問題,很簡單,把後面兩個元素的左邊框去掉或者設定它們的margin-left為負值即可。

<style>
    *{
        margin:0;
        padding:0;
    }
    li{
        list-style:none;
    }
    ul li{
        float:left;
        width:100px;
        height:35px;
        line-height:35px;
        text-align:center;
        margin:100px auto;
        border:4px solid #dedede;
    }
    ul li ~ li{
        /*border-left:none;*/
        margin-left:-4px;
    }
</style>
<body>
    <ul>
        <li>HTML</li>
        <li>CSS</li>
        <li>Javascript</li>
    </ul>
</body>
複製程式碼

執行效果,如下所示:

用CSS來製作圖示

2.一個和邊框很像的屬性outline

可以用它來繪製元素的輪廓,並且不佔空間。

<style>
    .box{
        width:100px;
        height:100px;
        line-height:100px;
        margin:100px auto;
        text-align:center;
        background:red;
        outline:1px solid #dedede;
    }
</style>
<body>
    <div class="box">outline</div>
</body>
複製程式碼

猜一猜,這個div的寬度和高度是多少吶?

使用outline屬性可以很好的解決了,當滑鼠移動到某元素上時,動態新增邊框帶來的抖動問題。

<style>
    .box{
        width:100px;
        height:100px;
        line-height:100px;
        margin:100px auto;
        text-align:center;
        background:red;
    }
    .box:hover{
        outline:4px solid #dedede;
    }
</style>
<body>
    <div class="box">outline</div>
</body>
複製程式碼

執行結果如下:

用CSS來製作圖示

值得注意的是,border-radius不會作用在outline上。

<style>
    .box{
        width:100px;
        height:100px;
        line-height:100px;
        margin:100px auto;
        text-align:center;
        background-color:red;
        outline:5px solid #dedede;
        border-radius:20px;
    }
</style>
<body>
    <div class="box">outline</div>
</body>
複製程式碼

執行結果如下:

用CSS來製作圖示

如果想不佔空間,還想使用border-radius怎麼辦吶?

<style>
    .box{
        width:100px;
        height:100px;
        line-height:100px;
        text-align:center;
        background-color:red;
        border:10px solid #dedede;
        border-radius:20px;
        box-sizing:border-box;
    }
</style>
<body>
    <div class="box"></div>
</body>
複製程式碼

還可以利用box-shadow屬性:

<style>
    .box{
        width:100px;
        height:100px;
        line-height:100px;
        text-align:center;
        background-color:red;
        box-shadow:0 0 0 10px #dedede;
        border-radius:10px;
        margin:10px;
    }
</style>
<body>
    <div class="box">box-shadow</div>
</body>
複製程式碼

執行結果如下:

用CSS來製作圖示

box-shadow:x軸偏移 y軸偏移 陰影大小 邊框大小 填充顏色,利用此屬性,可以很好的模擬邊框,還不佔空間。

3.利用CSS製作圖示

(1) 平行四邊形圖示

<style>
    .box{
        width:50px;
        height:50px;
        background:red;
        transform:skew(-25deg);
        margin-left:100px;
    }
</style>
<body>
    <div class="box"></div>
</body>
複製程式碼

執行結果如下:

用CSS來製作圖示

(2) 暫停按鈕

暫停按鈕的原理是利用邊框border,裡面的方形用outline,再利用outline-offset屬性可以用來設定偏移,並且是按照比例來的。

<style>
    .box{
        width:50px;
        height:50px;
        color:#000;
        border:1px solid #000;
        cursor:pointer;
        border-radius:50%;
        outline:10px solid #000;
        outline-offset:-26px;
    }
</style>
<body>
    <div class="box"></div>
</body>
複製程式碼
執行結果如下:

用CSS來製作圖示

如果將outline-offset再設定小一點,就出現了一個+號。

用CSS來製作圖示

如果再修改一些屬性和新增一些屬性,就會出現如下的圖示:
<style>
    .box{
        width:50px;
        height:50px;
        background-color:#000;
        border:1px solid #000;
        cursor:pointer;
        border-radius:50%;
        outline:10px solid #fff;
        outline-offset:-35px;
        transform:rotate(45deg);
    }
</style>
<body>
    <div class="box"></div>
</body>
複製程式碼

用CSS來製作圖示

(3) 梯形圖示

<style>
    .box{
        width:35px;
        border:50px solid transparent;
        border-bottom:50px solid red;
    }
</style>
<body>
    <div class="box"></div>
</body>
複製程式碼

執行結果如下:

用CSS來製作圖示

(4) 鷹嘴圖示

<style>
    .box{
        width:35px;
        border-top:50px solid transparent;
        border-right:22px solid #096;
        border-bottom-right-radius:100%;
    }
</style>
<body>
    <div class="box"></div>
</body>
複製程式碼

執行結果如下:

用CSS來製作圖示

(5) 左右箭頭圖示

<style>
    .box{
        width:0;
        height:0;
        border:10px solid transparent;
        border-left:10px solid red;
        -webkit-box-reflect: left 5px;
        box-reflect:left 5px;
        margin-left:100px;
    }
</style>
<body>
    <div class="box"></div>
</body>
複製程式碼

執行結果如下:

用CSS來製作圖示

值得注意的是,box-reflect屬性具有相容性問題,只能在Chrome瀏覽器中開啟。

(6) 下載圖示

<style>
    .box{
        width:0;
        color:blue;
        border:8px solid transparent;
        border-top:8px solid blue;
        box-shadow:0 -12px 0 -4px;
    }
</style>
<body>
    <div class="box"></div>
</body>
複製程式碼

執行結果如下:

用CSS來製作圖示

相關文章