我有一个页面,边框半径设置为50%的小元素,所以它们显示为小点:
CSS:
.star {
width: 5px;
height: 5px;
background-color: rgb(236, 236, 236);
position: absolute;
border-radius: 50%;
transform: scale(1);
display: block;
transition: 0.25s ease-in background-color, 0.25s ease-in opacity, 0.25s ease-out transform;
cursor: pointer;
}
其中每个都有一个悬停动作,会弹出一定的弹出窗口。然而,现在有一个问题,即悬停(至少在我测试过的浏览器中)是一个找到像素的游戏。
是否有"技巧"在点上添加一个不可见的边框,使它们更容易选择,而不需要寻找像素?
将border
设置为2px solid transparent
只会使我的测试中的圈子更大,而CSS outline
不会产生:hover
州或mouseenter
事件。
答案 0 :(得分:3)
使用伪元素增加“命中区域”
body {
background: #000;
}
.star {
width: 5px;
height: 5px;
background-color: rgb(236, 236, 236);
position: absolute;
left: 50%;
top: 50%;
border-radius: 50%;
transform: scale(1);
display: block;
transition: 0.25s ease-in background-color, 0.25s ease-in opacity, 0.25s ease-out transform;
cursor: pointer;
}
.star::before {
content: '';
position: absolute;
border-radius: 50%;
width: 500%;
height: 500%;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
z-index:-1;
border:1px solid green; /* for demo purposes */
}
.star:hover {
background: #f00;
}
<div class="star"></div>
答案 1 :(得分:2)
试试这个:
.star {
width: 10px;
height: 10px;
padding:10px;
background:#000;
border-radius:50%;
background-clip:content-box; /* <- key point*/
}
.star:hover { background-color:#f00; }
<div class="star"></div>
增加填充将为您提供更大的命中空间。
答案 2 :(得分:1)
您的透明边框方法很好,在所有浏览器中效果最佳;) 只需添加:
background-clip: padding-box;
确保背景不显示在边框下。
答案 3 :(得分:0)
在每颗星下添加一个圆圈,然后给它一个黑色背景;
<div class="starWrapper">
<div class="star"></div>
</div>
.star { top:3px;
left:3px;
width: 5px;
height: 5px;
background-color: rgb(236, 236, 236);
position: absolute;
border-radius: 50%;
transform: scale(1);
display: block;
cursor: pointer;}
.startWrapper{
position:absolute;
background:#000;
width:8px;
height:8px;
border-radius: 50%;}