[英]How do I prevent the height of li change when increasing its border to 2px from 1px?
Every time when the mouse is over the box, its border needs to increase from 1px
to 2px
.每次鼠标在盒子上时,它的边框需要从
1px
增加到2px
。 But it would make all the content below the li:hover
moving one pixel downwards.但它会使
li:hover
下面的所有内容向下移动一个像素。
How do I prevent this?我该如何防止这种情况? Is there a pure CSS solution?
有没有纯 CSS 解决方案?
Thanks,谢谢,
$('li').on('mouseover', function(){$(this).addClass('li-hover')}); $('li').on('mouseout', function(){$(this).removeClass('li-hover')});
li {border:1px solid black; margin-bottom:9px}.li-hover {border:2px solid black}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <ul> <li>bar1</li> <li>bar2</li> <li>bar3<br>break line</li> <li>bar4</li> <li>bar5</li> </ul>
You can solve this using outline
instead of border
, as outline
does not affect the height of the element (whereas border
is resizing the box).您可以使用
outline
而不是border
来解决此问题,因为outline
不会影响元素的高度(而border
正在调整框的大小)。
In addition, I'd suggest using the :hover
in css rather than explicitly setting a class on hover
, so instead of .li-hover
, use li:hover
: In addition, I'd suggest using the
:hover
in css rather than explicitly setting a class on hover
, so instead of .li-hover
, use li:hover
:
li {outline:1px solid black; margin-bottom:9px} li:hover {outline:2px solid black}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <ul> <li>bar1</li> <li>bar2</li> <li>bar3<br>break line</li> <li>bar4</li> <li>bar5</li> </ul>
I would wrap the initial text and put a border on that - that way you can start with a transparent border on the li:我会包装初始文本并在其上放置一个边框 - 这样您就可以从 li 上的透明边框开始:
$('li').on('mouseover', function() { $(this).addClass('li-hover') }); $('li').on('mouseout', function() { $(this).removeClass('li-hover') });
li { border: 1px solid transparent; margin-bottom: 9px } li > span { display:block; border: 1px solid black; }.li-hover { border-color: black }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <ul> <li><span>bar1</span></li> <li><span>bar2</span></li> <li><span>bar3<br>break line</span></li> <li><span>bar4</span></li> <li><span>bar5</span></li> </ul>
If you can't add an extra span, you could use a box-shadow (which also works with border radius):如果您无法添加额外的跨度,则可以使用 box-shadow (也适用于边框半径):
li { box-shadow: 0 0 0 1px black; margin-bottom: 9px; border-radius:5px; } li:hover { box-shadow: 0 0 0 2px black; }
<ul> <li>bar1</li> <li>bar2</li> <li>bar3<br>break line</li> <li>bar4</li> <li>bar5</li> </ul>
If you don't want to use outline then try this:如果您不想使用大纲,请尝试以下操作:
.li-hover {border:2px solid black; margin-bottom: 7px;}
$('li').on('mouseover', function(){$(this).addClass('li-hover')}); $('li').on('mouseout', function(){$(this).removeClass('li-hover')});
li {border:1px solid black; margin-bottom:9px}.li-hover {border:2px solid black; margin-bottom: 7px;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <ul> <li>bar1</li> <li>bar2</li> <li>bar3<br>break line</li> <li>bar4</li> <li>bar5</li> </ul>
$('li').on('mouseover', function() { $(this).addClass('li-hover') }); $('li').on('mouseout', function() { $(this).removeClass('li-hover') });
li { border: 1px solid black; margin-bottom: 9px } li:hover { border: 1px solid transparent; } span { display: block; border: 2px solid transparent; } span:hover { border: 2px solid black; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <ul> <li><span>bar1</span></li> <li><span>bar2</span></li> <li><span>bar3<br>break line</span></li> <li><span>bar4</span></li> <li><span>bar5</span></li> </ul>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.