You could toggle which one's shown on hover:
HTML:<a href="#" class="lock">
<i class="icon-unlock"></i>
<i class="icon-lock"></i>
</a>
CSS:
.lock:hover .icon-unlock,
.lock .icon-lock {
display: none;
}
.lock:hover .icon-lock {
display: inline;
}
Or, you could change the content
of the icon-unlock
class:
.lock:hover .icon-unlock:before {
content: "\f023";
}
You can use pure CSS:
ul#menu i.fa-envelope:hover:before {content: "\f2b6";}
Simple way open css file of font awesome and change icon code on hover...
for example below is the code for lock icon
content: "\f023";
and here below is the code for unlock icon in css which you can put under :hover
.icon-unlock:before {
content: "\f09c";
}
In jquery it would just be:
$(document).ready(function () {
$('.icon-unlock').hover(function () {
$(this).addClass('icon-lock');
$(this).removeClass('icon-unlock');
}, function () {
$(this).addClass('icon-unlock');
$(this).removeClass('icon-lock');
});
});
Here is a working jsfiddle of this.
If you are using jquery ui then you can use .switchClass.
An example of this would be:
$(document).ready(function() {
$(".icon-unlock").switchClass("icon-unlock", "icon-lock");
});
The api on .switchClass() is located here
If you are using SCSS, you could simply do this. Much lightweight than any of the JS solutions and lighter on the DOM.
.icon-unlock:hover {
@extend .icon-lock;
}
In my templates I often use FontAwesome and I came up with this CSS trick
* > .fa-hover-show,
*:hover > .fa-hover-hidden {
display: none;
}
*:hover > .fa-hover-show {
display: inline-block;
}
Add both icons to the HTML; the default icon should have the fa-hover-hidden
class while the hover icon one should have fa-hover-show
.
<a href="#">
<i class="fa fa-lock fa-hover-hidden"></i>
<i class="fa fa-lock-open fa-hover-show"></i>
<span class="fa-hover-hidden">Locked</span>
<span class="fa-hover-show">Unlocked</span>
</a>
Given that the icon has a hover effect, it is likely that it is inside a button or link, in which case, a proper solution would be to also react to the change on :focus as well.
* > .fa-hover-show,
*:hover > .fa-hover-hidden,
*:focus > .fa-hover-hidden {
display: none;
}
*:focus > .fa-hover-show,
*:hover > .fa-hover-show {
display: inline-block;
}