CSS3箭頭

箭頭示例

web網(wǎng)頁設(shè)計(jì)和開發(fā)的過程中,經(jīng)常會(huì)接觸到箭頭,用來指引用戶的交互行為,多用于展開子菜單,比如下面的網(wǎng)頁截圖中:

arrow_default.png

這種箭頭的制作方法通常有兩種:

  • 圖片:使用這種方式的網(wǎng)站最多,將小圖標(biāo)放入一個(gè)集合圖片中,用background-position來控制,通常叫css sprite(css精靈)。
  • 字體:使用自定義字體來代替特殊的字符。
    <em>ps:這種方式不是本文重點(diǎn),詳情請(qǐng)參考:Font-awesome </em>。
    相對(duì)于圖片的方式,自定義字體的優(yōu)勢(shì)很明顯,便于維護(hù),不費(fèi)吹灰之力就可以控制字體的顏色、大??;而缺點(diǎn)就是需要更多的設(shè)計(jì)成本。
  • 而對(duì)于設(shè)計(jì)“簡單”的箭頭,即常見的、如前面截圖所示那種,我們可以用CSS3來實(shí)現(xiàn),原理就是:<b>把它看做只有兩個(gè)邊框的元素,再旋轉(zhuǎn)45度。</b>旋轉(zhuǎn)需要使用CSS3中,transform:rotate():
div{
    width: 200px;
    height: 200px;
    background: rgba(255, 0,0,0.1);
    border-color:red;
    border-width: 0 0 2px 2px;
    border-style: solid;
    transform:rotateZ(-45deg);  
}

實(shí)際運(yùn)用中,應(yīng)該將背景色置為透明transparent,這里為了演示,將背景設(shè)為與邊框相同的顏色并將透明的度設(shè)為0.1來對(duì)比。border-width就決定了箭頭的厚度,將具有左和下邊框的正方形逆時(shí)針旋轉(zhuǎn)45度就完成了,效果如圖:

90°箭頭示例.png

</br><h3>那么,如果做90°之外的箭頭,CSS可行嗎?</h3>
常見的箭頭設(shè)計(jì)是大于90°的,在上面例子的基礎(chǔ)上,“壓扁”或“拉長”矩形不就可以了嗎?而“壓扁”或“拉長”需要用skew()就能實(shí)現(xiàn),只不過需要做些角度的計(jì)算。接下來,我要使用less來制作,因?yàn)槲覀冃枰獙⑿枨笾械募^角度和邊長作為變量來寫css,從而便于維護(hù)和減少計(jì)算。

首先,我們按照200px長,120°的需求來定義邊長、角度兩個(gè)變量:

@arrow_length: 200px;
@arrow_angle: 120deg;

接著,在上面90°直角箭頭的例子基礎(chǔ)上,用skew來扭曲出來要求的120°角度。 <em>ps:skew的詳細(xì)用法請(qǐng)參考文章最后的拓展鏈接。</em>

transform: skewX(30deg);

為什么是30°呢?請(qǐng)看下面的圖解,它會(huì)讓你仿佛回到初中的數(shù)學(xué)課堂里。


height計(jì)算.png

skew扭曲之后,相應(yīng)的height應(yīng)該根據(jù)角度而減小,從而讓菱形的變成相等。那么,如圖所示,height=widht*cos30°.
這樣,我們就做出來120度的箭頭了,接下來你也應(yīng)該知道怎么做了,就是讓其rotate(旋轉(zhuǎn))到要求的角度就完成了。一般的箭頭設(shè)計(jì)是向下的,根據(jù)上一步,我們要逆時(shí)針旋轉(zhuǎn)30度就可以得到向下的箭頭,在這里請(qǐng)?jiān)试S我不再詳細(xì)用數(shù)學(xué)知識(shí)解釋為什么是逆時(shí)針30度了,你可以自己動(dòng)手試試,我做這步的時(shí)候就是懶得去算,而是直接在瀏覽器中調(diào)試所得。<em>ps記得要先rotate再skew.</em>

transform: rotate(-30deg) skewX(30deg);

最終效果圖:

自定義角度箭頭.png

如果你需要查看、使用甚至編輯完整的代碼,<b>請(qǐng)點(diǎn)擊這里,訪問我的github。</b>你可以嘗試制作一個(gè)less函數(shù),將角度、邊長,方向,厚度四個(gè)參數(shù)來確定一個(gè)箭頭。

箭頭這種接近盒模型的圖型建議使用CSS來實(shí)現(xiàn),便于維護(hù),而且能加強(qiáng)開發(fā)者對(duì)瀏覽器渲染盒模型和CSS3特性的理解和聯(lián)想能力。
有一次我想做一個(gè)“隨身聽”來播放音樂,考慮到響應(yīng)式得時(shí)候我就想:“能不能不切圖,只用CSS實(shí)現(xiàn)?”,經(jīng)過一番努力與研究,真的做出來了,效果幾乎能與圖片睥睨,卻適應(yīng)任何的設(shè)備瀏覽器寬度。這里是演示:CSS音樂播放器


參考:CSS3-transform,less函數(shù), less中calc的方式余弦定理。是的,你沒看錯(cuò),就是余弦定理-我認(rèn)為這個(gè)例子最難知識(shí)點(diǎn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 各種純css圖標(biāo) CSS3可以實(shí)現(xiàn)很多漂亮的圖形,我收集了32種圖形,在下面列出。直接用CSS3畫出這些圖形,要比...
    劍殘閱讀 10,005評(píng)論 0 8
  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    love2013閱讀 2,460評(píng)論 0 11
  • 1、屬性選擇器:id選擇器 # 通過id 來選擇類名選擇器 . 通過類名來選擇屬性選擇器 ...
    Yuann閱讀 1,771評(píng)論 0 7
  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    wzhiq896閱讀 2,137評(píng)論 0 2
  • 前言 Enum,也就是枚舉,從C語言開始就有了,C++、Java、Objective-C、Swift這些語言,當(dāng)然...
    腦路異常閱讀 7,598評(píng)論 1 6

友情鏈接更多精彩內(nèi)容