「HTML+CSS」--自定義按鈕樣式【003】


前言

Hello!小伙伴!
首先非常感謝您閱讀海轟的文章,倘若文中有錯誤的地方,歡迎您指出~
哈哈 自我介紹一下
昵稱:海轟
標簽:程序猿一只|C++選手|學生
簡介:因C語言結識編程,隨后轉入計算機專業,有幸拿過國獎、省獎等,已保研。目前正在學習C++/Linux(真的真的太難了~)
學習經驗:扎實基礎 + 多做筆記 + 多敲代碼 + 多思考 + 學好英語!
日常分享:微信公眾號【海轟Pro】記錄生活、學習點滴,分享一些源代碼或者學習資料,歡迎關注~

效果展示

在這里插入圖片描述

思路

上面效果可以概括為:

  • 鼠標未停留時:青色(漸變)背景,正中文字為白色,button四角做了圓角處理
  • 鼠標停留時:淺青色背景從上至下,依次覆蓋button
  • 鼠標離開button時:淺青色背景從上至下,依次消失,button逐漸恢復原樣

根據效果圖可以得出實現的一些思路:

  • 初始狀態,設置button背景為漸變青色,中間文字為白色,做圓角、陰影處理
  • 初看有兩個過渡效果,其實是可以用一個元素的過渡transition實現的
  • 這里我們就利用button的::before偽類元素來實現
  • 將::before設置為絕對定位,初始位置為左下角(右下也是可以的),其中width設置為100%,height為0
  • 觸發hover時,height設置為100%,top設置為0 (記住這里的關鍵點top:0)
  • 還有就是,button和::before的背景顏色需要有所深淺變化

這里使用的漸變色:

  • 深青(漸變):linear-gradient(315deg, #89d8d3 0%, #03c8a8 74%);
  • 淺青(漸變):linear-gradient(315deg, #4dccc6 0%, #96e4df 74%);

Demo代碼

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <title>Document</title>
</head>
<body>
    <button class="btn">Haihong Pro</button>
</body>
</html>

CSS

html,body{
    margin: 0;
    height: 100%;
}
body{
    display: flex;
    justify-content: center;
    align-items: center;
}
.btn{
    width: 390px;
    height: 120px;
    background:linear-gradient(315deg, #89d8d3 0%, #03c8a8 74%);
    border: none;
    border-radius: 10px;
    font-family: 'Lato', sans-serif;
    font-weight: 500;
    font-size: 48px;
    color: #fff;
    box-shadow: inset 2px 2px 2px 0px rgba(255, 255, 255, .5),
    7px 7px 20px 0px rgba(0, 0, 0, .1),
    4px 4px 5px 0px rgba(0, 0, 0, .1);
    outline: none;
    position: relative;
    z-index: 0;
}
.btn::before{
    position:absolute;
    content: '';
    left: 0;
    bottom:0;
    width: 100%;
    height: 0;
    transition: all 0.3s ease;
    border-radius: 10px;
    background: linear-gradient(315deg, #4dccc6 0%, #96e4df 74%);
    z-index: -1;
}
.btn:hover::before{
    top: 0;
    height: 100%;
}
.btn:active{
    top: 2px;
}

疑點詳解

1.為什么觸發hover時,除了設置height:100%外,還需要設置top:0呢?上面效果圖原理是怎樣呢?

為了便於觀察,我們將::before的初始狀態顯示出來

在這里插入圖片描述
在這里插入圖片描述
初始時,before的位置是在左下角(bottom:0 left:0)

觸發hover時,如果只是設置heigth:100%,產生的效果如下:

在這里插入圖片描述
如果此時立即將位置改為左上角(top:0 left:0),就會產生從上至下的效果:

在這里插入圖片描述
所以還需要在觸發hover時,添加 top:0 ( left就不需要變了,因為原本設置好了 )

2.為什么最后需要設置:active呢?

.btn:active{
    top: 2px;
}

emmm,就是產生一個點擊按鈕的動態效果(點擊一下,動一下),具體可以查看css :active的作用,這里就不多說了。

踩坑

1.button、button::before需要設置z-index,分別為0和-1(確定button在上面一層就行)

不然,會產生如下效果:

在這里插入圖片描述
2.button中記得設置 outline: none;

不然,點擊button后,會出現藍色邊框

注:前兩次文章中海轟也沒有發現這個問題,今天寫的的時候,點擊后才發現了這個問題

在這里插入圖片描述

結語

學習來源:

https://codepen.io/yuhomyan/pen/OJMejWJ

css只會一點點,學習之余從喜歡看一些大神級別的css效果展示,根據源碼一點一點學習知識點,文中有不對的地方,歡迎指出~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM