大家都知道網頁最需要也最必備的就是navbar,也就是導覽列,這種導覽列有些在上面,
也有些在側邊,就像有些人偏左有些人偏右。
今天我要示範的超質感選單,就是屬於側邊的選單,會有好看的圖示,也有懸浮的效果。
會搭配icon的CDN引入以及CSS的使用,有運用到偽元素的概念。
JS的部分會使用JQ去建立監聽事件,使得游標移入過的選單選項會持續的有選取的CSS效果,
其實就是class的API,很簡單。
icon的部份我們使用ion-icon。這個是一個超棒的免費圖示資料庫!
其實以前我的文章也就有介紹到過唷,在google五星評論那一集。
【前端動手玩創意】google五星評分的星星(2)
https://ithelp.ithome.com.tw/articles/10311643
<script type="module" src="https://unpkg.com/ionicons@7.1.0/dist/ionicons/ionicons.esm.js"></script>
<script nomodule src="https://unpkg.com/ionicons@7.1.0/dist/ionicons/ionicons.js"></script>
使用前要把上面兩個CDN給他丟進我們的html裡面唷。
之後就可以爽爽的使用惹。
之後我們建構container以及ul li,裡面放置span,上面是icon下面是文字。
如以下:
<div class="container">
<div class="navigation">
<ul>
<li>
<a href="#">
<span class="icon"><ion-icon name="logo-apple"></ion-icon></span>
<span class="title">Brand Name</span>
</a>
</li>
<li>
<a href="#">
<span class="icon"
><ion-icon name="home-outline"></ion-icon
></span>
<span class="title">Bashboard</span>
</a>
</li>
<li>
<a href="#">
<span class="icon"
><ion-icon name="person-outline"></ion-icon
></span>
<span class="title">Customers</span>
</a>
</li>
<li>
<a href="#">
<span class="icon"
><ion-icon name="chatbox-ellipses-outline"></ion-icon
></span>
<span class="title">Message</span>
</a>
</li>
<li>
<a href="#">
<span class="icon"
><ion-icon name="help-outline"></ion-icon
></span>
<span class="title">Help</span>
</a>
</li>
<li>
<a href="#">
<span class="icon"
><ion-icon name="settings-outline"></ion-icon
></span>
<span class="title">Settings</span>
</a>
</li>
<li>
<a href="#">
<span class="icon"
><ion-icon name="lock-closed-outline"></ion-icon
></span>
<span class="title">Password</span>
</a>
</li>
<li>
<a href="#">
<span class="icon"
><ion-icon name="lock-closed-outline"></ion-icon
></span>
<span class="title">Sign Out</span>
</a>
</li>
</ul>
</div>
</div>
這邊就完成了側單的元素要件了,接著是CSS的美化部分。
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: "Ubuntu", sans-serif;
}
:root {
--bule: #287bff;
--white: #fff;
--grey: #f5f5f5;
--black1: #222;
--black2: #999;
}
body {
min-height: 100vh;
overflow-x: hidden;
}
.container {
position: relative;
width: 100%;
}
.navigation {
position: fixed;
width: 300px;
height: 100%;
background: var(--bule);
border-left: 10px solid var(--blue);
transition: 0.5s;
overflow: hidden;
}
.navigation ul {
position: absolute;
top: 0;
left: 0;
width: 100%;
}
.navigation ul li {
position: relative;
width: 100%;
list-style: none;
border-top-left-radius: 30px;
border-bottom-left-radius: 30px;
}
.navigation ul li:hover,
.navigation ul li.hovered {
background: var(--white);
}
.navigation ul li:nth-child(1) {
margin-bottom: 40px;
pointer-events: none;
}
.navigation ul li a {
position: relative;
display: block;
width: 100%;
display: flex;
text-decoration: none;
color: var(--white);
}
.navigation ul li:hover a,
.navigation ul li.hovered a {
color: var(--bule);
}
.navigation ul li a .icon {
position: relative;
display: block;
min-width: 60px;
height: 60px;
line-height: 70px;
text-align: center;
}
.navigation ul li a .icon ion-icon {
font-size: 1.75em;
}
.navigation ul li a .title {
position: relative;
display: block;
padding: 0 10px;
height: 60px;
line-height: 60px;
text-align: start;
white-space: nowrap;
}
.navigation ul li:hover a::before,
.navigation ul li.hovered a::before {
content: "";
position: absolute;
right: 0;
top: -50px;
width: 50px;
height: 50px;
background: transparent;
border-radius: 50%;
box-shadow: 35px 35px 0 10px var(--white);
pointer-events: none;
}
.navigation ul li:hover a::after,
.navigation ul li.hovered a::after {
content: "";
position: absolute;
right: 0;
bottom: -50px;
width: 50px;
height: 50px;
background: transparent;
border-radius: 50%;
box-shadow: 35px -35px 0 10px var(--white);
pointer-events: none;
}
一開始做了清空margin padding的設定以及box的調整,那都是基礎的XD
然後特別注意到root的部分是先把使用到的顏色給設定變數起來
這是原生CSS就可以達到的功能唷
超級酷也超級實用的呢!
剩下值得注意的API是
border-top-left-radius: 30px;
border-bottom-left-radius: 30px;
這個可以製造出圓弧的效果。
// 使用 jQuery 選取元素清單
let list = $(".navigation li");
function activeLink() {
// 移除所有元素的 "hovered" 類別
list.removeClass("hovered");
// 在滑鼠移過的元素上新增 "hovered" 類別
$(this).addClass("hovered");
}
// 使用 jQuery 的 each 方法為每個元素加上滑鼠移過事件的監聽器
list.each(function () {
$(this).on("mouseover", activeLink);
});
這邊要注意的是使用jQuery的話,是each不是forEach哈哈哈!很常會搞錯!要小心。
其他的地方都非常簡單呢。
側邊選單非常的常見,但是要做出高質感的選單就需要多花一點心力在CSS的部分。
甚至動用到一點JS。٩(◦`꒳´◦)۶
這就是前端的精隨所在,追求質感也是很重要的呢!
讓我們未來繼續動手玩創意吧~~