CSS利用Border實現(xiàn)帶箭頭的提示層

前端工程師經(jīng)常遇到要在頁面上做彈出提示層舷蟀,不少框架給出了非常方便的組件,只需要給某個元素附上一個類就能實現(xiàn)漂亮的tip效果弧轧。
這篇文檔介紹如何根據(jù)CSS的border屬性實現(xiàn)一個箭頭居中顯示的tip層組件雪侥。

定義通用tip類

給通用的tip類定義一些必要的樣式

/* tips */
.ui-tip{
    width:auto;
    height:auto;
    padding:.3rem;
    margin:0 auto;
    position:relative;
    text-align:center;
    border-radius:5px;
}

接著定義一個箭頭類,因為不是所有的tip層都需要箭頭精绎,只要給需要箭頭的tip層加上這個類就能出現(xiàn)箭頭速缨,去掉類名即去掉箭頭。

/* tip with arrow */
.ui-tip-arrow::before,.ui-tip-arrow::after{
    content: "";
    display: block;
    position: absolute;
    width: 0;
    height: 0px;
    border-width: .25rem;
    border-style: solid;
}

這里定義了::before::after兩個偽元素代乃,為什么要兩個旬牲?這個問題在后面解釋,先往下看搁吓。

再定義兩個類原茅,分別是向上的箭頭和向下的箭頭:

/* arrow up */
.ui-tip-arrow.ui-tip-arrow-up::after{ 
    border-left-color: transparent;
    border-top-color: transparent;
    bottom:100%;
    right:50%;
}
.ui-tip-arrow.ui-tip-arrow-up::before{
    border-right-color: transparent;
    border-top-color: transparent;
    bottom:100%;
    left:50%;
}
/* arrow down */
.ui-tip-arrow.ui-tip-arrow-down::after{ 
    border-left-color: transparent;
    border-bottom-color: transparent;
    right:50%;
    top:100%;
}
.ui-tip-arrow.ui-tip-arrow-down::before{
    border-right-color: transparent;
    border-bottom-color:transparent;
    left:50%;
    top:100%;
}

利用兩個偽元素實現(xiàn)一個居中的箭頭赘艳,這里要注意兩點:

  1. ::before::after各顯示為一個箭頭的左半部分和右半部分雾家,需要調(diào)整好它們的四個邊上的border屬性。
  2. ::before::after兩個偽元素設(shè)置好恰當?shù)?code>left和right屬性值寞埠,這樣他們才能居中顯示摩骨。

這樣一個箭頭居中顯示的tip類就做好了通贞,剩下的就是給tip和箭頭層定義theme朗若,這里定義了一個黑底白字的主題:

/* a black background theme */
.ui-theme-black{background-color:rgba(48,48,48,1);color:white;}
.ui-theme-black::after,.ui-theme-black::before {border-color: rgba(48,48,48,1);}

如何使用

跟大多數(shù)的組件使用方法類似,只需要給顯示為tip的元素添加對于的類名昌罩,例如:

<div class="ui-tip ui-tip-arrow ui-tip-arrow-up ui-theme-black"  id="tip_1">箭頭向上的tip層</div>
<div class="ui-tip ui-tip-arrow ui-tip-arrow-down ui-theme-black"  id="tip_2">just code it!</div>

顯示效果如下:

箭頭居中顯示的tip層

結(jié)語

上面提到了一個問題哭懈,就是為什么要用兩個偽元素實現(xiàn)箭頭,用一個不行么茎用?當然可以遣总!只是用一個偽元素的話要讓箭頭居中就比較困難了。

因為提示層的文字數(shù)量會變轨功,寬度是不固定的旭斥,要讓偽元素處于居中的位置,就需要給它某種規(guī)則古涧,例如常見的固定寬度+margin方法琉预,或者使用伸縮盒子模型,但這些規(guī)則相對比較復(fù)雜蒿褂。以后或許會使用這些方法來實現(xiàn),這里暫不做討論卒暂。

我們再把圖片放大啄栓,仔細看一下上面的解決方案:

利用兩個偽元素實現(xiàn)居中的箭頭

其中::before元素的left值為50%,確保它的左邊在tip層的中間位置,然后讓它的頂部和右側(cè)的border顯示為透明也祠;::after元素則相反昙楚,讓它的right值為50%,使其右邊位于tip層的中間位置并且設(shè)置其左側(cè)和頂部border透明诈嘿。

Good!


參考過的文檔:

  1. 純CSS氣泡框?qū)崿F(xiàn)方法探究
  2. CSS Arrows (Up, Down, Left and Right Triangle)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末堪旧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子奖亚,更是在濱河造成了極大的恐慌淳梦,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昔字,死亡現(xiàn)場離奇詭異爆袍,居然都是意外死亡,警方通過查閱死者的電腦和手機作郭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門陨囊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人夹攒,你說我怎么就攤上這事蜘醋。” “怎么了咏尝?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵压语,是天一觀的道長啸罢。 經(jīng)常有香客問我,道長无蜂,這世上最難降的妖魔是什么伺糠? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮斥季,結(jié)果婚禮上训桶,老公的妹妹穿的比我還像新娘。我一直安慰自己酣倾,他們只是感情好舵揭,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著躁锡,像睡著了一般午绳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上映之,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天拦焚,我揣著相機與錄音,去河邊找鬼杠输。 笑死赎败,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的蠢甲。 我是一名探鬼主播僵刮,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鹦牛!你這毒婦竟也來了搞糕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤曼追,失蹤者是張志新(化名)和其女友劉穎窍仰,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拉鹃,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡辈赋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了膏燕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钥屈。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖坝辫,靈堂內(nèi)的尸體忽然破棺而出篷就,到底是詐尸還是另有隱情,我是刑警寧澤近忙,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布竭业,位于F島的核電站智润,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏未辆。R本人自食惡果不足惜窟绷,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望咐柜。 院中可真熱鬧兼蜈,春花似錦、人聲如沸拙友。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遗契。三九已至辐棒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間牍蜂,已是汗流浹背漾根。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鲫竞,地道東北人立叛。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像贡茅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子其做,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案顶考? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽?zāi)J的外補...
    _Yfling閱讀 13,748評論 1 92
  • 本文主要是起筆記的作用,內(nèi)容來自慕課網(wǎng). 認識CSS樣式 CSS全稱為“層疊樣式表 (Cascading Styl...
    0o凍僵的企鵝o0閱讀 2,639評論 0 30
  • 學(xué)習(xí)CSS的最佳網(wǎng)站沒有之一 http://www.w3school.com.cn/tags/index.asp ...
    Amyyy_閱讀 1,050評論 0 1
  • display: none; 與 visibility: hidden; 的區(qū)別 聯(lián)系:它們都能讓元素不可見 區(qū)別...
    紋小艾閱讀 1,463評論 0 1
  • 這是一個快節(jié)奏的時代,每個人都或多或少地被影響蹈胡,馬不停蹄地做這做那渊季,結(jié)果卻不盡如人意。 比如減肥罚渐。朋友圈里那些10...
    馮大大在此閱讀 209評論 0 0