寫一個navbar有很多按鈕,我的寫法是放很多li裡面包a文字。
我想要的效果是:
當游標移動到li的話改li的背景顏色、a文字的顏色。
<nav class="nav">
<li><a href="">討論區</a></li>
</nav>
前者很簡單,用hover就可以了,但我在裡面放color卻沒有效果!!?
li:hover{
background-color: #2f6f9f;
transform: scale(1.2);
transition: all 0.3;
color: white; //這句沒辦法改動到文字顏色
}
想了許久,難道必須要靠js才能補上這個簡單的小效果嗎??
以上謝謝前端前輩們。
一般瀏覽器上,<a>
的 color
有自己的非繼承屬性值。
若想要 <a>
的 color
繼承自「父元素」的屬性值,需要使用 inherit
:
<!DOCTYPE html><html><head><style>
nav.nav{ width: 50vw; margin: auto }
li:hover{
background-color: #2f6f9f;
transform: scale(1.2);
transition: all 0.3s;
color: white;
}
li:hover >a { color: inherit }
</style></head><body>
<nav class="nav"><ul>
<li><a href="">討論區</a></li>
</ul></nav>
</body></html>
但這方式會讓 <a>
的動畫初始顏色變成 <li>
的初始顏色(黑),動畫過程會有點突兀。
所以用下面的「非 inherit
」方式會好點:
<!DOCTYPE html><html><head><style>
nav.nav{ width: 50vw; margin: auto }
li:hover, li:hover a {
transition: all 0.3s;
color: white;
}
li:hover {
transform: scale(1.2);
background-color: #2f6f9f;
}
</style></head><body>
<nav class="nav"><ul>
<li><a href="">討論區</a></li>
</ul></nav>
</body></html>
P.S.: 以上兩個方法不是「觸發父層而改動子層」的概念,而是「修改符合 CSS 選擇器篩選的元素之屬性」的概念。
CSS是有所謂的繼承性。
基本來說是 style(自定義樣式) -> 指定樣式 -> 上層可繼承樣式
也就是說,當你想指定 li 內的 a 字體顏色。
你得先了解到, a 本身是否有被繼承或是指定了樣式。
如果分不清楚的話。一般就是也將a也一起定義進去。