Если вы примените border
для элемента при наведении курсора мыши, он «раздвинет» окружающие элементы. Однако, используя отрицательное значение CSS-свойства margin
, вы можете сделать это не затрагивая другие элементы или контент.
Давайте посмотрим пример, чтобы понять, как это в основном работает:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Add CSS Border on Hover without Moving the Elements</title>
<style>
ul {
padding: 0;
list-style: none;
}
ul li {
float: left;
margin: 10px;
}
ul li a, ul li a img {
display: block;
}
ul li a:hover {
border: 5px solid #333333;
overflow: hidden;
}
ul li a:hover img{
margin: -5px;
}
</style>
</head>
<body>
<ul>
<li><a href="#"><img src="club.jpg" alt="Club Card"></a></li>
<li><a href="#"><img src="diamond.jpg" alt="Diamond Card"></a></li>
<li><a href="#"><img src="spade.jpg" alt="Spade Card"></a></li>
<li><a href="#"><img src="heart.jpg" alt="Heart Card"></a></li>
</ul>
</body>
</html>
В качестве альтернативы вы можете установить border
с той же шириной и значением цвета transparent
для элемента по умолчанию. В контексте вышеприведенного примера это будет так: ul li a { border: 5px solid transparent; }
. Теперь, при наведении будет изменяться цвет границы не меняя размеры элемента и не затрагивая окружающие элементы.