简体   繁体   English

将边框从 1px 增加到 2px 时,如何防止 li 的高度发生变化?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM