使用CSS生成圖標

有一次筆者在參加前端面試的過程當中被面試官問到這樣一個問題: BootStrapt裏面的圖標是怎麼樣的?
用過Bootstrapt的開發者都知道,在Bootstrapt裏面有一個圖標組件,引用這個文件以後,就能夠經過給元素添加類名來給元素添加相應的圖標,而且這個圖標還能夠改變顏色和大小。那麼它是怎麼實現的呢?
你們首先想到的最通用的添加圖標的方法就是以圖片的形式添加,可是仔細想想,圖片能改變顏色嗎?
你們再想一想,字體能夠改變顏色和大小。並且CSS3支持web字體,使得圖標的變化更爲豐富,因而就有人用字體制做了圖標。可是,咱們今天要講的是功能更強的圖標製做方案:用純生html和css製做圖標。
圖片描述css

下面從最簡單的實例開始教你們如何使用CSS製做icon
1.三角形圖標
效果圖:
圖片描述html

詳細講解實現過程:
首先,實現長方形邊框
HTML的塊級元素都是長方形的,好比咱們設定了如下樣式:前端

<style>
.simple-retangle {
    margin: 50px auto;
    width: 200px;
    height: 200px;
    border: 40px solid salmon;
}
</style>
<div class="simple-retangle"></div>

圖片描述

這個長方形太單調了,再給它點顏色看看,我們來個彩色邊框吧。web

<style>
.colored-border-retangle {
    margin: 50px auto;
    width: 200px;
    height: 200px;
    border-top: 40px solid coral;
    border-right: 40px solid lightblue;
    border-bottom: 40px solid lightgreen;
    border-left: 40px solid mediumpurple;
}
</style>
<div class="colored-border-retangle"></div>

圖片描述

請注意長方形的4個角,以左上角爲例,它究竟是屬於左邊框仍是上邊框呢?
左上角,既屬於左邊框,又屬於上邊框,角落的歸屬成了一個問題,瀏覽器爲了避免讓邊框打架,就讓二位各分一半吧。因而乎左上角就被一分爲二,變成了兩個三角形,三角形靠近哪一個邊框,就顯示那個邊框的顏色。
三角形的實現
咱們把上面這個彩色邊框的矩形內容拿掉,看看會發生什麼。面試

<style>
.colored-border-empty-retangle {
    margin: 50px auto;
    height:0;
    border-top: 40px solid coral;
    border-right: 40px solid lightblue;
    border-bottom: 40px solid lightgreen;
    border-left: 40px solid mediumpurple;
}
</style>
<div class="colored-border-empty-retangle"></div>

嗚,cool!左邊和右邊都是三角形了 耶!
圖片描述瀏覽器

爲何上邊和下邊仍是梯形呢?這是由於塊級元素默認會在頁面上水平平鋪。
理解這一點讓上邊和下邊也變成三角形就簡單了,將元素的width屬性設爲0:app

<style>
.colored-border-empty-retangle {
    margin: 50px auto;
    width: 0;
    height: 0;
    border-top: 40px solid coral;
    border-right: 40px solid lightblue;
    border-bottom: 40px solid lightgreen;
    border-left: 40px solid mediumpurple;
}
</style>
<div class="colored-border-empty-retangle"></div>

如今上下左右4個邊框都是三角形了。
圖片描述學習

如何製做成三角形呢?把三個邊框設置成透明試一試!字體

<style>
    .triangle-top,
    .triangle-right,
    .triangle-bottom,
    .triangle-left {
        margin: 20px auto;
        width: 0;
        height: 0;
        border: 100px solid transparent;
    }
    
    .triangle-top {
        border-top-color: coral;
    }
    
    .triangle-right {
        border-right-color: lightblue;
    }
    
    .triangle-bottom {
        border-bottom-color: lightgreen;
    }
    
    .triangle-left {
        border-left-color: mediumpurple;
    }
</style>
<div class="triangle-top"></div>
<div class="triangle-right"></div>
<div class="triangle-bottom"></div>
<div class="triangle-left"></div>

圖片描述

2.下面是一個實現旗幟的效果:
圖片描述spa

根據以上知識,咱們很天然地就能想到實現方法,將border-bottom的顏色設置爲透明的。

/*CSS:*/
.flag {
width: 0;
height: 0;
border: 2rem solid #FF6600;
border-top-width: 4rem;
border-bottom-color: transparent;
border-bottom-width: 2rem;
}

實例二:製做快進按鈕效果
圖片描述

爲了減小頁面的HTML元素,咱們能夠只提供一個元素實現第1個三角形,而後藉助CSS3的僞類實現第2個三角形。
第1個三角形使用了相對定位,第2個三角形使用了絕對定位,使得第2個三角形可以緊挨着第1個三角形。

/*CSS:*/
    .rds-arrow-wrapper {
    position: relative;
    width: 20em;
    text-align: center;
}
 
.rds-arrow,
.rds-arrow:after {
    display: inline-block;
    position: relative;
    width: 0;
    height: 0;
    border-top: 1rem solid transparent;
    border-left: 2rem solid #eae;
    border-bottom: 1rem solid transparent;
    border-right: 2rem solid transparent;
}
 
.rds-arrow {
    margin-left: 1rem;
}
 
.rds-arrow:after {
    content: "";
    position: absolute;
    left: 100%;
    top: -1rem;
    bottom: 0;
}

須要注意的是,箭頭方向是向右的,但在CSS裏面是經過border-left的顏色來控制的。

通過以上兩個例子,你們對製做圖案的原理都有初步的瞭解了吧。下面的實例三將帶領你們製做一個經常使用的icon圖標,相信你們學習了以後,發散本身的思惟,就能夠製做出更多的圖案。
圖片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Home</title>
    <style type="text/css">
    /*容器*/
    /*將絕對大小變爲相對大小,能夠經過改變容器的大小控制圖案的大小*/
    body{
        position: relative;
        font-size:67.25%;/*16px * 67.25 = 10px */
    }
    /*Home居中顯示*/
        .Home{
            position: absolute;
            margin: 0 auto;
            width:50%;    
            left: 0;right: 0;        
        }
    /*煙囪製做*/
        .left{
            position: absolute;
            width: 0;height: 0;
            border: 1em solid gray;
            border-top:2em solid gray;
            top:1em;
            left:2em;
        }
        /*屋頂製做*/
        .top{
            position: absolute;
            width: 0;height: 0;
            border: 8em solid transparent;
            border-bottom: 8em solid gray;
            top: -8em;
            left: -2em;
        }
        /*房屋製做*/
        .bottom{
            position: absolute;
            width: 7em;height: 8em;
            border: 1em solid gray;
            border-top: 1em solid transparent;
            top:6em;
            left:1.5em;
        }
    </style>
</head>
<body>
    <div class="Home">
        <div class="left"></div>
        <div class="top"></div>
        <div class="bottom"></div>
    </div>

</body>
</html>

好了,下面該是你設計出本身圖案的時候了~
圖片描述

相關文章
相關標籤/搜索