成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

如何使用CSS創(chuàng)建巧妙的動(dòng)畫提示框

wmui / 3221人閱讀

摘要:我們巧妙的提示框打算使用屬性選擇器也就是方括號表示法。相對性這是用在提示框的父元素上的。向上向下提示框要用到關(guān)鍵幀,而向左向右提示框使用關(guān)鍵幀。注意,在這些關(guān)鍵幀中,我們只定義了提示框所需的終止?fàn)顟B(tài)。

原文:https://webdesign.tutsplus.co...
原作:Jase Smith
翻譯:Stypstive

當(dāng)你的用戶需要漂亮的圖標(biāo)給出額外的文字信息時(shí),亦或是當(dāng)他們在點(diǎn)擊了按鈕之后需要確認(rèn)自己沒點(diǎn)錯(cuò)時(shí),又或是帶圖片和字幕的復(fù)活節(jié)彩蛋,提示框是用來增強(qiáng)用戶界面的絕佳手段?,F(xiàn)在,讓我們來做幾個(gè)動(dòng)畫提示框,沒有別的,只有HTML和CSS。

樣例

這是我們之后要做的:

http://jsfiddle.net/kcschaefe...

在我們沉浸在寫代碼的過程中之前,讓我們先來看看我們的意圖是什么。主要目的是為了獲得一種簡單的添加提示框的方法,這樣一來,我們之后就能夠通過增加一個(gè)自定義的 tooltip 屬性來做到這一點(diǎn)。

    visible text or icon, etc.
關(guān)于可訪問性和功能的記注

如果你在尋找兼容508的提示框,或者需要帶容器沖突偵測和/或HTML內(nèi)容 vs 純文本的智能提示框,有許多實(shí)用第三方腳本的解決方案能滿足你的要求。

"用JavaScript來做完全可訪問的交互組件是命令式的" - Sara Soueidan, 打造一個(gè)完全可訪問的幫助提示框...比你想的要難

這篇教程不會特地解決可訪問性的需求。你了解你的用戶,知道他們需要什么,所以有關(guān)這方面,也要記得考慮他們的需求。

讓我們設(shè)定幾個(gè)預(yù)期

不需要JavaScript

我們將會使用屬性選擇器(而不是類名),以及CSS內(nèi)建的模式匹配

加到現(xiàn)有的DOM元素(你的標(biāo)簽中不需要新的元素)

代碼例子中是沒有前綴的(如有需要,為你的目標(biāo)瀏覽器加上供應(yīng)商前綴)

假設(shè)通過 mouseover/hover 來觸發(fā)提示框

僅僅是純文本提示框(HTML,圖片等等都不支持)

當(dāng)喚起提示框時(shí),有巧妙的動(dòng)畫

好了,老司機(jī)要開車了!

哦,等等。我們還要先處理一個(gè)問題,是關(guān)于"不需要額外標(biāo)簽"的。畢竟,這很巧妙。 我們的提示框真的不需要額外的DOM元素,因?yàn)樗鼈兺耆腔趥卧氐模?b>::before 和 ::after),我們可以通過CSS來控制。

如果你已經(jīng)在其它樣式集中使用了一個(gè)元素的偽元素,又希望在這個(gè)元素是加一個(gè)提示框,那么你可能需要稍稍做一些重構(gòu)。

沒什么比得上來一場提示框盛會了!

等等。小壞蛋!還有一個(gè)警告:CSS定位。為了提示框正常運(yùn)作,它們的父元素(我們把提示框添加在它后面)需要是

position: relative,或者

position: absolute,或

position: fixed

基本上,什么都行,只要不是 position: static — 這是瀏覽器賦給幾乎所有元素的默認(rèn)定位模式。提示框是絕對定位的,所以它們需要知道它們的絕對值在什么邊界內(nèi)是有意義的。 默認(rèn)的定位指令 static 不會聲明它的邊界,也不會給我們的提示框以上下文來進(jìn)行相對定位。所以提示框會使用之后,最近的,有聲明邊界的父元素。

你還需要根據(jù)你如何使用提示框來決定哪個(gè)定位指令最為合適。這篇教程假設(shè)父元素是 postion: relative 如果你的UI依靠一個(gè)絕對定位的元素,那么在那個(gè)元素上部署一個(gè)提示框,也會需要一些重構(gòu)(額外的標(biāo)簽)。

讓我們開始吧。

屬性選擇器:快速回顧

大多數(shù)CSS規(guī)則印象中都是用類名寫的,比如 .this-thing ,但是CSS有幾個(gè)類型的選擇器。我們巧妙的提示框打算使用屬性選擇器——也就是方括號表示法。

    [foo] {
    background: rgba(0, 0, 0, 0.8);
    color: #fff;
}

當(dāng)瀏覽器看到諸如此類的東西時(shí):

Check it out!

瀏覽器會知道,它需要應(yīng)用 [foo] 規(guī)則了,因?yàn)? 標(biāo)簽有一個(gè)叫做 foo 的屬性。在這個(gè)例子中,span自身會有一個(gè)半透明的黑色背景,以及白色文字。

HTML元素有著各種各樣的內(nèi)置屬性,但是我們也可以給出我們自己的屬性。比如 foo ,又或者是 tooltip 。默認(rèn)情況下,HTML不知道這些東西是什么意思,但是有了CSS,我們可以告訴HTML這些自定義屬性是什么意思。

為什么用屬性選擇器?

我們后面會使用屬性選擇器,主要是出于側(cè)重分離的目的。使用屬性而不是類名,并不會讓我們在詳細(xì)程度上獲得更多益處,類和屬性在詳細(xì)程度上是相同的。 然而,通過使用屬性,我們可以把我們的內(nèi)容放在一塊兒,因?yàn)镠TML屬性可以有值,而類名沒有值。

在這個(gè)例子的代碼中,來權(quán)衡一下類名 .tooltip 對比屬性 [tooltip] 。類名是 [class] 屬性的值中的一個(gè),而tooltip屬性可以存放一個(gè)值,它就是我們要顯示的文字。

lorem ipsum
 
lorem ipsum
現(xiàn)在讓我們來看看提示框煉金術(shù)

我們的提示框會使用兩種不同的屬性:

tooltip: 這個(gè)屬性存放了提示框的內(nèi)容(一個(gè)純文本字符串)

flow: 可選;這個(gè)屬性允許我們控制如何顯示提示框。我們可以支持很多方位,但是我們會覆蓋4各常用方位:上,左,右,下

現(xiàn)在,讓我們?yōu)樗械奶崾究蜃龊脺?zhǔn)備工作。步驟1-5的規(guī)則會應(yīng)用到所有的提示框上,無論我們給 flow 屬性什么值。步驟6-7對于不同的 flow 值會有所區(qū)分。

1) 相對性

這是用在提示框的父元素上的。讓我們來給定一個(gè)定位指令,這樣提示框的組成部分(即::before::after 偽元素)的絕對定位就可以以父元素做參照進(jìn)行定位,而不是以整個(gè)頁面或祖父元素或DOM樹上方的其它外圍元素作為參照進(jìn)行定位。

[tooltip] {
  position: relative;
}
2) 偽元素準(zhǔn)備時(shí)間

是時(shí)候準(zhǔn)備偽元素了。在這里,我們要對 ::before::after 設(shè)置常用屬性。content 屬性是真正讓偽元素工作的屬性,不過我們稍后再討論它。

[tooltip]::before,
[tooltip]::after {
    line-height: 1;
    user-select: none;
    pointer-events: none;
    position: absolute;
    display: none;
    opacity: 0;
 
    /* opinions */
    text-transform: none; 
    font-size: .9em;
}
3) 丁克帽

我不知道丁克帽是不是說得通,我只是一直這么叫它。它是一個(gè)尖尖的小三角形,通過指向它的調(diào)用者,為提示框提供對話氣泡的感覺。 注意到我們在邊界顏色這一塊,使用了 tranparent ;由于上色要根據(jù)提示框的 flow 值來,所以之后再加上顏色。

[tooltip]::before {
    content: "";
    z-index: 1001;
    border: 5px solid transparent;
}

content: "";聲明中的值是一個(gè)空字符串,這并不是筆誤。字符串里面,我們不想要任何東西,但是我們需要這個(gè)屬性,使得偽元素得以存在。

為了生成一個(gè)三角形,我們定義了一個(gè)實(shí)現(xiàn)邊框,在空的盒子(沒有內(nèi)容)上加了一些厚度,而不設(shè)定盒子的寬度和高度,僅僅對盒子的每一條邊都給一個(gè)邊框顏色。

4) 氣泡!

這里是重點(diǎn)了。注意到 content: attr(tooltip) 這一部分是說:“這個(gè)偽類應(yīng)該使用 tooltip 屬性的值作為這個(gè)偽類的內(nèi)容。”這也是為什么使用屬性而不是類名會這么贊的原因。

[tooltip]::after {
    content: attr(tooltip); /* magic! */
    z-index: 1000;
     
    /* most of the rest of this is opinion */
    font-family: Helvetica, sans-serif;
    text-align: center;
     
    /* 
    Let the content set the size of the tooltips 
    but this will also keep them from being obnoxious
    */
    min-width: 3em;
    max-width: 21em;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
     
    /* visible design of the tooltip bubbles */
    padding: 1ch 1.5ch;
    border-radius: .3ch;
    box-shadow: 0 1em 2em -.5em rgba(0, 0, 0, 0.35);
    background: #333;
    color: #fff;
}

注意看丁克帽和氣泡的 z-index 值。這些值可以是任意的。但是要記住,z-index 值是相對的。 解釋:一個(gè)z-index值為1001的元素,在一個(gè)z-index為3的元素內(nèi)部。僅僅意味著,z-index: 3 容器內(nèi)部,1001元素是最頂層的元素。

氣泡的z-index應(yīng)該至少比丁克帽的z-index低一檔。如果它和丁克的一樣高,或更高的話,如果你提示框使用了 box-shadow 的話,結(jié)果在丁克帽上回得到不一致的顏色效果。

5)交互動(dòng)作

我們的提示框是通過把鼠標(biāo)移動(dòng)到帶提示框的元素上面,來激活的。差不多是這樣。

[tooltip]:hover::before,
[tooltip]:hover::after {
    display: block;
}

如果你回顧在第2不中的樣式部分,你會看到我們對提示框的組成部分,使用了 opacity: 0; 以及 display: none; 。我們這么做是為了當(dāng)提示框顯示和隱藏時(shí),可以使用CSS動(dòng)畫效果。

display屬性是不能做成動(dòng)畫的,但是opacity屬性可以!我們留到最后來處理動(dòng)畫的問題。如果你對動(dòng)畫提示框沒興趣,只要把第2步中的 opacity: 0; 刪掉,無視第7步即可。

最后一件要應(yīng)用到所有提示框上的是,如果提示框沒有內(nèi)容,能有一個(gè)方法來抑制提示框。如果你使用某種動(dòng)態(tài)系統(tǒng)(Vue.js, Angular, 或者 React, PHP等等)來生成提示框的話,我們就不需要笨笨的空白氣泡了!

/* don"t show empty tooltips */
[tooltip=""]::before,
[tooltip=""]::after {
    display: none !important;
}
6) 流控制

這一步會變得更加復(fù)雜,因?yàn)槲覀儠褂靡恍┎荒敲闯R姷倪x擇器,來幫助我們的提示框基于 flow 值(或沒有flow屬性)來確定位置。

“奇怪的東西出現(xiàn)在了 Circle-K 的門口” — Ted Theodore Logan

在我們寫樣式之前,讓我們看看將要用到一些選擇器模式。

[tooltip]:not([flow])::before,
[tooltip][flow^="up"]::before {
    /* ...
    properties: values
    ... */
}

這是在告訴瀏覽器:“對于所有帶有 tooltip 屬性來說,其中沒有 flow 屬性的元素,或者有flow元素,但它的值是以"up"開頭的:將這些樣式套用到這類元素的::before偽元素上。”

我們在這里使用了一個(gè)模式,這樣一來,這些東西可以擴(kuò)展到其它流上,而步需要重復(fù)這么多的CSS。這個(gè)模式 flow^="up" 使用了 ^= (開頭)匹配符。 如果你想增加其它流控制的話,通過這個(gè)模式,也可以將樣式應(yīng)用在 up-right 和 up-left 方向上(代碼中)。我們在這里不會討論這些流控制,不過你可以在CodePen上,我原來的提示框演示中看到如何使用它們。

以下是教程中所講到的4個(gè)流所對應(yīng)的CSS代碼塊。

/* ONLY the ::before */
[tooltip]:not([flow])::before,
[tooltip][flow^="up"]::before {
    bottom: 100%;
    border-bottom-width: 0;
    border-top-color: #333;
}
 
/* ONLY the ::after */
[tooltip]:not([flow])::after,
[tooltip][flow^="up"]::after {
    bottom: calc(100% + 5px);
}
 
/* Both ::before & ::after */
[tooltip]:not([flow])::before,
[tooltip]:not([flow])::after,
[tooltip][flow^="up"]::before,
[tooltip][flow^="up"]::after {
    left: 50%;
    transform: translate(-50%, -.5em);
}
[tooltip][flow^="down"]::before {
    top: 100%;
    border-top-width: 0;
    border-bottom-color: #333;
}
 
[tooltip][flow^="down"]::after {
    top: calc(100% + 5px);
}
 
[tooltip][flow^="down"]::before,
[tooltip][flow^="down"]::after {
    left: 50%;
    transform: translate(-50%, .5em);
}
[tooltip][flow^="left"]::before {
    top: 50%;
    border-right-width: 0;
    border-left-color: #333;
    left: calc(0em - 5px);
    transform: translate(-.5em, -50%);
}
 
[tooltip][flow^="left"]::after {
    top: 50%;
    right: calc(100% + 5px);
    transform: translate(-.5em, -50%);
}
[tooltip][flow^="right"]::before {
    top: 50%;
    border-left-width: 0;
    border-right-color: #333;
    right: calc(0em - 5px);
    transform: translate(.5em, -50%);
}
 
[tooltip][flow^="right"]::after {
    top: 50%;
    left: calc(100% + 5px);
    transform: translate(.5em, -50%);
}
7) 讓一切都動(dòng)起來

動(dòng)畫是很神奇的。動(dòng)畫可以做到:

讓用戶感覺舒服

讓用戶感受到你的用戶界面的空間感

注意到該看到的東西

讓用戶界面中本來非黑即白的生硬效果變得柔和

我們的提示框?qū)儆谧詈竽且环N。如果僅僅是讓一個(gè)文字泡泡出現(xiàn)然后突然消失,效果是不令人滿意的,我們可以讓它更柔和一些。

關(guān)鍵幀 (@keyframes)

我們需要兩個(gè)關(guān)鍵幀 (@keyframe) 動(dòng)畫。向上/向下提示框要用到tooltips-vert關(guān)鍵幀,而向左/向右提示框使用tooltips-horz關(guān)鍵幀。 注意,在這些關(guān)鍵幀中,我們只定義了提示框所需的終止?fàn)顟B(tài)。我們并不需要知道它們從何處來 (提示框本身就有狀態(tài)信息)。我們只想控制它們要到哪兒去。

@keyframes tooltips-vert {
  to {
    opacity: .9;
    transform: translate(-50%, 0);
  }
}
 
@keyframes tooltips-horz {
  to {
    opacity: .9;
    transform: translate(0, -50%);
  }
}

現(xiàn)在,當(dāng)一個(gè)用戶的鼠標(biāo)移到觸發(fā)元素 (具有[tooltip]屬性的元素) 上時(shí),我們需要將這些關(guān)鍵幀應(yīng)用到提示框上。因?yàn)槲覀儾捎昧瞬煌牧鱽砜刂铺崾究虻娘@示方式,我們需要在樣式中對它們進(jìn)行定義。

使用:hover將控制傳遞給動(dòng)畫
[tooltip]:not([flow]):hover::before,
[tooltip]:not([flow]):hover::after,
[tooltip][flow^="up"]:hover::before,
[tooltip][flow^="up"]:hover::after,
[tooltip][flow^="down"]:hover::before,
[tooltip][flow^="down"]:hover::after {
    animation: 
        tooltips-vert 
        300ms 
        ease-out
        forwards;
}
 
[tooltip][flow^="left"]:hover::before,
[tooltip][flow^="left"]:hover::after,
[tooltip][flow^="right"]:hover::before,
[tooltip][flow^="right"]:hover::after {
    animation: 
        tooltips-horz 
        300ms 
        ease-out 
        forwards;
}

我們不能對display屬性進(jìn)行動(dòng)畫,但是可以通過操作opacity屬性,在提示框上加上淡入效果。我們也可以動(dòng)畫transform屬性,它可以給提示框加上微妙的動(dòng)作,觸發(fā)的元素就像飛入某點(diǎn)的一樣。

主要forward關(guān)鍵詞在動(dòng)畫的聲明中,這告訴動(dòng)畫當(dāng)完成時(shí)不重置,而是繼續(xù)停留在結(jié)束。

結(jié)論

棒極了!我們在這個(gè)教程里已經(jīng)覆蓋了很多,一堆提示框效果。

http://jsfiddle.net/kcschaefe...

我們僅僅摸索了用css做提示框的表面。好好享受它們,繼續(xù)試驗(yàn),調(diào)制出你自己的方子!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/112195.html

相關(guān)文章

  • 如何使用CSS創(chuàng)建巧妙動(dòng)畫提示

    摘要:我們巧妙的提示框打算使用屬性選擇器也就是方括號表示法。相對性這是用在提示框的父元素上的。向上向下提示框要用到關(guān)鍵幀,而向左向右提示框使用關(guān)鍵幀。注意,在這些關(guān)鍵幀中,我們只定義了提示框所需的終止?fàn)顟B(tài)。 原文:https://webdesign.tutsplus.co...原作:Jase Smith翻譯:Stypstive 當(dāng)你的用戶需要漂亮的圖標(biāo)給出額外的文字信息時(shí),亦或是當(dāng)他們在點(diǎn)擊...

    vpants 評論0 收藏0
  • 【譯】編寫更好CSS必備40個(gè)工具

    摘要:一個(gè)叫的人用純重繪并模擬了種不同的移動(dòng)設(shè)備包括可以給你的網(wǎng)站添加不相關(guān)的獨(dú)立組件的一個(gè)庫。每一個(gè)組件都是針對移動(dòng)設(shè)備定制的,并且它有很多你在傳統(tǒng)的框架中看不到的功能。如果你用開發(fā)移動(dòng)優(yōu)先的網(wǎng)站,并想要網(wǎng)站正常運(yùn)行在低版本的上,可以考慮。 眾所周知,CSS是非常棒的,它使網(wǎng)站看起來很漂亮,可以為網(wǎng)站添加動(dòng)畫,并讓呈現(xiàn)和內(nèi)容分離。去了解CSS的一切是非常難做到的,它只會變得更加困難,因?yàn)槲?..

    moven_j 評論0 收藏0
  • task0002(四)- 練習(xí):數(shù)據(jù)處理、輪播及交互

    摘要:獲取下一個(gè)元素節(jié)點(diǎn),存在的話,取消現(xiàn)有選中狀態(tài),設(shè)置下一個(gè)元素節(jié)點(diǎn)為選擇中,調(diào)用運(yùn)動(dòng)框架實(shí)現(xiàn)動(dòng)畫,添加定時(shí)器,調(diào)用該函數(shù),實(shí)現(xiàn)自動(dòng)播放。移出時(shí),開啟定時(shí)器,繼續(xù)輪播。輪播間隔時(shí)間單位為毫秒,默認(rèn)為,在內(nèi)部,以下部分進(jìn)行修改或添加。 轉(zhuǎn)載自我的個(gè)人博客 歡迎大家批評指正 包括5部分: 小練習(xí)1-處理用戶輸入 小練習(xí)2-日期對象的使用 小練習(xí)3:輪播圖 小練習(xí)4:輸入提示框 小練習(xí)...

    cnTomato 評論0 收藏0
  • task0002(四)- 練習(xí):數(shù)據(jù)處理、輪播及交互

    摘要:獲取下一個(gè)元素節(jié)點(diǎn),存在的話,取消現(xiàn)有選中狀態(tài),設(shè)置下一個(gè)元素節(jié)點(diǎn)為選擇中,調(diào)用運(yùn)動(dòng)框架實(shí)現(xiàn)動(dòng)畫,添加定時(shí)器,調(diào)用該函數(shù),實(shí)現(xiàn)自動(dòng)播放。移出時(shí),開啟定時(shí)器,繼續(xù)輪播。輪播間隔時(shí)間單位為毫秒,默認(rèn)為,在內(nèi)部,以下部分進(jìn)行修改或添加。 轉(zhuǎn)載自我的個(gè)人博客 歡迎大家批評指正 包括5部分: 小練習(xí)1-處理用戶輸入 小練習(xí)2-日期對象的使用 小練習(xí)3:輪播圖 小練習(xí)4:輸入提示框 小練習(xí)...

    趙春朋 評論0 收藏0
  • 67 個(gè)拯救前端開發(fā)者工具、庫和資源

    摘要:庫一個(gè)用來在中創(chuàng)建炫酷的浮動(dòng)粒子的庫一個(gè)用來在中創(chuàng)建物體和空間的庫快速實(shí)現(xiàn)全屏滾動(dòng)特性打字機(jī)效果滾動(dòng)到某個(gè)元素位置時(shí)觸發(fā)一個(gè)功能語法高亮使用創(chuàng)建漂亮的圖表能夠明顯加速網(wǎng)站加載時(shí)間,鼠標(biāo)時(shí)預(yù)加載資源另一個(gè)圖表庫一個(gè)基于動(dòng)畫和平移的雪碧圖庫實(shí)現(xiàn) Javascript 庫 Particles.js? 一個(gè)用來在 web 中創(chuàng)建炫酷的浮動(dòng)粒子的庫 Three.js? 一個(gè)用來在 web 中創(chuàng)...

    XiNGRZ 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<