使用純css制作有炫酷交互的按鈕

前端入門簡(jiǎn)單,真正精通卻不那么容易

就css來說臀晃,會(huì)使用css做頁面布局也只是第一步衙四,css遠(yuǎn)比想象中的要強(qiáng)大。

js很多效果都可以利用css各種屬性和偽元素己沛,制作出來,而且比起js還要方便快速

這是一個(gè)菜單按鈕的效果距境,成為焦點(diǎn)后會(huì)變成一把叉申尼,在焦點(diǎn)移除后會(huì)還原會(huì)菜單形狀
這時(shí)就可以配合js做狀態(tài)管理寫出一個(gè)完整的下拉菜單或者側(cè)拉菜單了
之后也會(huì)使用在我的vue2.0項(xiàng)目中,如果爺您有興趣可以移步到項(xiàng)目地址處視察視察垫桂,如果爺開心了就加個(gè)星

具體的效果是這樣的

rotate menu button by css

這里是menu按鈕的演示地址

寫代碼要信奉“能偷懶就偷懶”原則师幕,在保證實(shí)現(xiàn)效果的基礎(chǔ)上,絕不多寫一個(gè)標(biāo)簽诬滩,多寫一段代碼
所以上面的效果咋一看需要至少4個(gè)標(biāo)簽才能寫完霹粥,其實(shí)只用了一個(gè)標(biāo)簽
用button標(biāo)簽做父元素,用兩個(gè)偽元素做兩個(gè)橫桿
問:“那還有一個(gè)橫桿呢疼鸟?”
是這樣后控,通過觀察效果圖,發(fā)現(xiàn)其實(shí)由菜單圖標(biāo)變換到X圖標(biāo)只需要其中的兩個(gè)橫桿空镜。
所以第三個(gè)橫桿我使用了box-shadow屬性來模擬浩淘,說到底捌朴,其實(shí)第三個(gè)橫桿只是第二個(gè)橫桿的投影而已

核心使用

  • 屬性:transform-origin, transform, box-shadow, transition
  • 偽元素::before, :after

代碼標(biāo)簽是用pug語法寫的,css是stylus語法寫的张抄,這兩種語法都比較簡(jiǎn)單砂蔽,如果會(huì)使用css選擇器就可以看懂
下面也會(huì)簡(jiǎn)單的說明下

話不多說,上代碼

button#btn.b-menu
// pug語法里的'#'和'.'同css里一樣'#'為id署惯,'.'為class
label(for="btn") click
// 除了id與class以外的屬性要如上面的形式寫在括號(hào)里
    
// 這里擴(kuò)展出來就是
// <button id="btn" class="b-menu"></button>
// <label for="btn">click</label>
// stylus是css的預(yù)編譯器的一種左驾,簡(jiǎn)化了css的寫法,結(jié)構(gòu)更加清晰
// 這里就不過多的陳述了极谊,有疑問可以下方留言詢問
 
// 先去除button的默認(rèn)樣式
button
  border none
  outline none
  box-shadow none
  background none
  color currentColor
  padding 0
  cursor pointer
 
// 關(guān)鍵的部分開始了
.b-menu
  width 25px
  height 25px
  position relative
  &:before, // before是第一橫桿诡右,after是第二個(gè)橫桿
  &:after // stylus里的&表示承接上文的意思,這里也就等同于.b-menu:after
    content ' '
    position absolute // 使用絕對(duì)定位到目標(biāo)位置
    background-color #fff
    display block
    width 100%
    height 3px
    left 0
    top 11px
    border-radius 3px
    transition all .5s
    transform-origin 50% 50% // 設(shè)置變換中心點(diǎn),這個(gè)很重要怀酷,直接影響到后面的效果
  &:before
    transform translateY(-6px) // 第一個(gè)橫桿向上偏移稻爬,這里使用transform而不使用top屬性是為了方便后面的使用
  &:after
    box-shadow 0 6px 0 0 #fff
  &:focus:before // 通過focus獲取焦點(diǎn),來觸發(fā)起偽元素的變化
    transform rotateZ(45deg) translateY(0)
  &:focus:after
    box-shadow 0 0 0 0 #fff
    transform rotateZ(135deg) translateY(0)

這個(gè)是開關(guān)的效果

效果是這樣的(duang!duang!daung!)


switch button

這里是switch button演示地址

開關(guān)效果又比之前那個(gè)復(fù)雜蜕依,switch的原理其實(shí)就是checkbox桅锄,
因?yàn)閕nput是單標(biāo)簽,所以無法使用偽元素样眠,這里就用到了label

核心使用

  • 屬性:transform, background-size, border-radius, border-width, transition, cubic-bezier
  • 標(biāo)簽:label
  • 偽元素::before, :after

代碼如下:
html

input(id="switch",type="checkbox").b-switchBtn
label(for="switch").b-switchLabel
// label標(biāo)簽利用for屬性與相應(yīng)id的input標(biāo)簽綁定友瘤,從而達(dá)到點(diǎn)擊label就是點(diǎn)擊input的效果

css

button,
input
  border none
  outline none
  box-shadow none
  background none
  color currentColor
  padding 0
  cursor pointer
  
.b-switchLabel
  position relative
  display inline-block
  width 60px
  height 25px
  input
    display none
  &:before, // before 作為白條
  &:after // after 作為水滴狀開關(guān)
    content ' '
    display block
    position absolute
  &:before
    width 100%
    height 4px
    background-color #fff
    left 0
    top 50%
    border-radius 5px
    transform translateY(-50%)
  &:after
    background-image url('http://upload-images.jianshu.io/upload_images/2005796-fcc62a13bd69f679.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240')
    // 因?yàn)閏ss不好寫出漂亮的水滴效果,所以這里取巧用了圖片
    background-size cover // 利用這個(gè)屬性縮放原來太大的圖片
    height 25px
    width 25px
    left 23%
    top 51%
    border-radius 25px
    transform-origin center center // 老套路檐束,定下變換中心點(diǎn)
    transform translate(-50%, -50%) // 矯正left和top的偏移
    background-clip border-box // 利用border-box屬性值來使背景圖片在border上也能顯示
    background-position 50% 50%
    border-style solid
    border-color transparent // 設(shè)置透明border有助于背景的顯示
    border-width 0 3px 0 0
    transition all .5s cubic-bezier(0.4, -0.95, 0.4, 1.8) // 設(shè)置貝塞爾曲線以達(dá)到Duang的效果
.b-switchBtn
  display none
  &:checked~.b-switchLabel // 設(shè)置開關(guān)在被選中時(shí)改變狀態(tài)辫秧,配合transition就動(dòng)了起來
    &:after
      left 78%
      border-width 0 0 0 3px

有疑問的或者有建議的可以在下方留言

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市被丧,隨后出現(xiàn)的幾起案子盟戏,更是在濱河造成了極大的恐慌,老刑警劉巖甥桂,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柿究,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡黄选,警方通過查閱死者的電腦和手機(jī)蝇摸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來办陷,“玉大人貌夕,你說我怎么就攤上這事∶窬担” “怎么了啡专?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)制圈。 經(jīng)常有香客問我植旧,道長(zhǎng)辱揭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任病附,我火速辦了婚禮,結(jié)果婚禮上亥鬓,老公的妹妹穿的比我還像新娘完沪。我一直安慰自己,他們只是感情好嵌戈,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布覆积。 她就那樣靜靜地躺著,像睡著了一般熟呛。 火紅的嫁衣襯著肌膚如雪宽档。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天庵朝,我揣著相機(jī)與錄音吗冤,去河邊找鬼。 笑死九府,一個(gè)胖子當(dāng)著我的面吹牛椎瘟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播侄旬,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼肺蔚,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了儡羔?” 一聲冷哼從身側(cè)響起宣羊,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎汰蜘,沒想到半個(gè)月后仇冯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鉴扫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年赞枕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坪创。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡炕婶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出莱预,到底是詐尸還是另有隱情柠掂,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布依沮,位于F島的核電站涯贞,受9級(jí)特大地震影響枪狂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宋渔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一州疾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧皇拣,春花似錦严蓖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吩坝,卻和暖如春毒姨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钉寝。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工弧呐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瘩蚪。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓泉懦,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親疹瘦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子崩哩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,728評(píng)論 1 92
  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color言沐,font邓嘹,text-align,li...
    wzhiq896閱讀 1,731評(píng)論 0 2
  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color险胰,font汹押,text-align,li...
    love2013閱讀 2,303評(píng)論 0 11
  • 和朋友發(fā)生了不開心的事起便,寫下來棚贾,從雙方出發(fā)思考對(duì)錯(cuò),慢慢的就平復(fù)了心情榆综,沒有了埋怨妙痹,沒有了對(duì)對(duì)方的氣,挺好的鼻疮。畢竟...
    怎么么了閱讀 216評(píng)論 0 0
  • 希望通過聊聊關(guān)于警察你不知道的那些事兒怯伊,讓大家更了解這個(gè)曾經(jīng)神圣的職業(yè)~ 警察作為國(guó)家機(jī)器最基礎(chǔ)的一部分,與部隊(duì)官...
    白米飯兒閱讀 377評(píng)論 0 0