我想在悬停时更改圆的边框宽度而不影响其他元素的位置. this jsFiddle会更清楚. HTML span class="menu"i class="cercle"/iFoo/spanspan class="menu"i class="cercle"/iBar/span CSS .menu{ margin-right: 10px; cursor: point
this jsFiddle会更清楚.
HTML
<span class="menu"><i class="cercle"></i>Foo</span> <span class="menu"><i class="cercle"></i>Bar</span>
CSS
.menu{
margin-right: 10px;
cursor: pointer
}
.cercle{
border-radius: 16px;
margin-right: 5px;
vertical-align: middle;
width: 16px;
height:16px;
display:inline-block;
border: 5px solid #ff9c08
}
.menu:hover i{
border-width: 3px;
transition:border-width .1s
}
您可以通过几种不同的方式来实现您想要的效果.
1.使用box-sizing:border-box:
通常,相邻元素会受到更改元素的border-width属性的影响,因为元素相对定位,并且当边框宽度更改时,每个元素占用的空间都会发生变化.使用box-sizing:border-box确保边框的宽度包含在元素的尺寸中.
.cercle {
box-sizing: border-box;
}
2.使用box-shadow:
另一种方法是使用box-shadow属性来模仿边框的视觉外观,但没有其特定的行为.元素的阴影在修改时不会影响相邻元素,因此在尝试实现您想要的效果时,它是另一个考虑的好选择.
.cercle {
box-shadow: inset 0 0 0 4px #ff9c08;
}
.menu:hover > .cercle {
box-shadow: inset 0 0 0 2px #ff9c08;
}
查看有关box-sizing和box-shadow的浏览器兼容性的更多信息,以了解哪种更适合您.您可以在here找到jsfiddle的更新版本,下面是一个片段.
片段:
.menu {
margin-right: 10px;
cursor: pointer;
}
.cercle {
width: 16px;
height: 16px;
display: inline-block;
margin-right: 5px;
vertical-align: middle;
border-radius: 16px;
}
#ex1 .cercle {
border: 4px solid #ff9c08;
box-sizing: border-box;
}
#ex1 .menu:hover i {
border-width: 2px;
transition: border-width .1s;
}
#ex2 .cercle {
box-shadow: inset 0 0 0 4px #ff9c08;
}
#ex2 .menu:hover .cercle {
box-shadow: inset 0 0 0 2px #ff9c08;
transition: box-shadow .1s;
}
<div id = "ex1"> <span class="menu"><i class="cercle"></i>Foo</span> <span class="menu"><i class="cercle"></i>Bar</span> </div> <br> <div id = "ex2"> <span class="menu"><i class="cercle"></i>Foo</span> <span class="menu"><i class="cercle"></i>Bar</span> </div>
