增加CSS圈的悬停区域

时间:2016-01-10 18:12:38

标签: html css css3

我有一个页面,边框半径设置为50%的小元素,所以它们显示为小点:

Said dots look like this

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事件。

4 个答案:

答案 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%;}