|
|
|
|
|
網(wǎng)頁選項卡或標(biāo)簽(tabs),是在網(wǎng)頁設(shè)計中不可缺少的部分。因為在用戶交互過程中,點擊標(biāo)簽的機(jī)會非常大,如果標(biāo)簽設(shè)計得不好,會影響用戶的使用體驗。所以,設(shè)計師要在標(biāo)簽設(shè)計上下一番功夫。本文介紹一個用純css實現(xiàn)的有過度效果的滑動選項卡或標(biāo)簽(slide tabs)。
滑動選項卡或標(biāo)簽(slide tabs)
從上圖看到,當(dāng)點擊標(biāo)簽時,有一個過渡滑動效果,使用體驗是相當(dāng)好的。
這個滑動標(biāo)簽(slide tabs)實現(xiàn)起來并不復(fù)雜,用純CSS就能實現(xiàn),并不需要太多代碼。
CSS
:root {
--primary-color: #185ee0;
--secondary-color: #e6eef9;
}
*,
*:after,
*:before {
box-sizing: border-box;
}
body {
font-family: "Inter", sans-serif;
background-color: rgba(230, 238, 249, 0.5);
}
.container {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
display: flex;
align-items: center;
justify-content: center;
}
.tabs {
display: flex;
position: relative;
background-color: #fff;
box-shadow: 0 0 1px 0 rgba(24, 94, 224, 0.15), 0 6px 12px 0 rgba(24, 94, 224, 0.15);
padding: 0.75rem;
border-radius: 99px;
}
.tabs * {
z-index: 2;
}
input[type=radio] {
display: none;
}
.tab {
display: flex;
align-items: center;
justify-content: center;
height: 54px;
width: 200px;
font-size: 1.25rem;
font-weight: 500;
border-radius: 99px;
cursor: pointer;
transition: color 0.15s ease-in;
}
.notification {
display: flex;
align-items: center;
justify-content: center;
width: 2rem;
height: 2rem;
margin-left: 0.75rem;
border-radius: 50%;
background-color: var(--secondary-color);
transition: 0.15s ease-in;
}
input[type=radio]:checked + label {
color: var(--primary-color);
}
input[type=radio]:checked + label > .notification {
background-color: var(--primary-color);
color: #fff;
}
input[id=radio-1]:checked ~ .glider {
transform: translateX(0);
}
input[id=radio-2]:checked ~ .glider {
transform: translateX(100%);
}
input[id=radio-3]:checked ~ .glider {
transform: translateX(200%);
}
.glider {
position: absolute;
display: flex;
height: 54px;
width: 200px;
background-color: var(--secondary-color);
z-index: 1;
border-radius: 99px;
transition: 0.25s ease-out;
}
@media (max-width: 700px) {
.tabs {
transform: scale(0.6);
}
}
HTML
<div class="container">
<div class="tabs">
<input type="radio" id="radio-1" name="tabs" checked />
<label class="tab" for="radio-1">Upcoming<span class="notification">2</span></label>
<input type="radio" id="radio-2" name="tabs" />
<label class="tab" for="radio-2">Development</label>
<input type="radio" id="radio-3" name="tabs" />
<label class="tab" for="radio-3">Completed</label>
<span class="glider"></span>
</div>
</div>
代碼解釋
HTML中 class="container"
的 <div>
是對整個標(biāo)簽內(nèi)容進(jìn)行定位。display: flex;
可實現(xiàn)內(nèi)容垂直居中。
如果想要添加新標(biāo)簽項,那么HTML和CSS都要添加部分代碼。
首先HTML添加新標(biāo)簽項代碼,假設(shè)這是第4個標(biāo)簽。
<input type="radio" id="radio-4" name="tabs" />
<label class="tab" for="radio-4">Demo</label>
然后CSS也添加相應(yīng)的代碼,注意數(shù)字的變化,一個是radio-4,另一個是300%。
input[id=radio-4]:checked ~ .glider {
transform: translateX(300%);
}
這樣,就會看到如下圖的結(jié)果——新增了一個demo標(biāo)簽項。
如果你要修改標(biāo)簽的顏色,過度效果滑動的速度,都可以修改CSS來實現(xiàn)。修改起來不難,只需知道 background-color
是顏色設(shè)置,而 transition
是動畫設(shè)置即可。