[英]Prevent elements moving when dynamically adding a border
在我的代码中,将鼠标悬停在元素上时,它们周围会出现一个红色边框。 当您将鼠标移出时,边框将被删除。
如您所见,当您使用多层陶瓷板时,边框在增加宽度和高度,因此元素在跳跃。
有没有办法防止跳来跳去?
document.addEventListener("mouseover", eOnMouseOver, true); document.addEventListener("mouseout", eOnMouseOut, true); function eOnMouseOver(e) { e.target.style.border = "2px solid red"; } function eOnMouseOut(e) { e.target.style.border = ""; }
<div style="border:1px black solid;">Mouseover me</div> <a href="#">Mouseover me</a>
就在这里。 您必须使用box-sizing: borde-box
以及供应商前缀来实现此目的。 这是我的意思:
document.addEventListener("mouseover", eOnMouseOver, true); document.addEventListener("mouseout", eOnMouseOut, true); function eOnMouseOver(e) { e.target.style.outline = "2px solid red"; } function eOnMouseOut(e) { e.target.style.outline = ""; }
* { box-sizing: border-box; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; -o-box-sizing: border-box; }
<div style="border:1px black solid;">Mouseover me</div> <a href="#">Mouseover me</a>
但是,在这种情况下,您无需使用javascript。 改用CSS伪类,如下所示:
* { box-sizing: border-box; -webkit-box-sizing: border-box; -moz-sizing: border-box; -ms-sizing: border-box; -o-sizing: border-box; } *:hover { outline: 2px solid red; }
<div style="border:1px black solid;">Mouseover me</div> <a href="#">Mouseover me</a>
当鼠标悬停在边框上添加颜色时,分配透明边框
div, a { border: 1px solid transparent; } div:hover, a:hover { border-color: red; }
<div>Mouseover me</div> <a href="#">Mouseover me</a>
function eOnMouseOver(e) {
e.target.style.border = "2px solid red";
e.target.style.marginLeft = "-2px";
e.target.style.marginTop = "-2px";
}
function eOnMouseOut(e) {
e.target.style.border = "";
e.target.style.marginLeft = "";
e.target.style.marginTop = "";
}
试试看 边距偏移量应将元素向上和向左拖动边框所推动的2像素,从理论上讲,保持元素稳定。 未经测试。
编辑:另一个解决方案是执行以下操作...
function eOnMouseOver(e) {
e.target.style.border = "2px solid red";
}
function eOnMouseOut(e) {
e.target.style.border = "2px solid transparent";
}
然后,只需将eOnMouseOut(e)函数中的边框应用于基本元素,这样它就不会在第一个mouseOver上反弹。
改用盒子阴影怎么样? 它不会影响您的布局,仅是视觉效果,并且可以保持div的border属性不变:
document.addEventListener("mouseover", eOnMouseOver, true); document.addEventListener("mouseout", eOnMouseOut, true); function eOnMouseOver(e) { e.target.style.boxShadow = "0 0 0 2px red"; } function eOnMouseOut(e) { e.target.style.boxShadow = "none"; }
<div style="border:1px black solid;">Mouseover me</div> <a href="#">Mouseover me</a>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.