简体   繁体   English

:将鼠标悬停在具有边框半径的div上

[英]:hover on a div with a border radius

I'm having an issue with hovering and a div with a border radius. 我有悬停问题和边界半径的div。

When a div has images inside it and a border radius, the "hitbox" for it is incorrect. 当div内部有图像和边框半径时,它的“hitbox”不正确。 Hovering over any of the corners of the div (where the corners would be if it didn't have a border radius) causes the hover style to show. 将鼠标悬停在div的任何角上(如果没有边框半径,角落将会是这样)会导致悬停样式显示。 I would expect the style to only show when the mouse is actually within the circle. 我希望样式只显示鼠标实际上在圆圈内。

If there is nothing in the div, the div's "hitbox" is correct, however it surpasses the border when there are elements within it. 如果div中没有​​任何内容,则div的“hitbox”是正确的,但是当其中包含元素时,它会超过边界。

I could a background image in the div, however I'd prefer not to for accessibility reasons. 我可以在div中使用背景图像,但是我不希望出于可访问性原因。

 #test-wrapper { background-color: #EEE; border: 4px dashed #999; display: inline-block; } #switcher { border-radius: 50%; overflow: hidden; position: relative; } #switcher, #switcher .first, #switcher .second { width: 100px; height: 100px; } #switcher .first, #switcher .second { position: absolute; top: 0; left: 0; } #switcher:hover .first { display: none; } 
  <!-- This is used to show the "hitbox" for the switcher and has no effect on the switcher itself --> <div id="test-wrapper"> <div id="switcher"> <!-- Shown on hover --> <img src="https://placeholdit.imgix.net/~text?txtsize=30&txt=Second&w=100&h=100&txttrack=0" class="second"> <!-- Always shown --> <img src="https://placeholdit.imgix.net/~text?txtsize=30&txt=First&w=100&h=100&txttrack=0" class="first"> </div> </div> 

The problem here is that child elements do not inherit the border-radius of their parents. 这里的问题是子元素不继承父元素的border-radius There are 2 ways to achieve what you want: you can either set the border-radius of the child element(s) to match or be greater than the parent element's radius or set the overflow property of the parent element to hidden . 有两种方法可以实现您想要的:您可以将子元素的border-radius设置为匹配或大于父元素的radius,或者将父元素的overflow属性设置为hidden

Here's a quick Snippet illustrating the problem and both solutions: 这是一个快速的片段,说明了问题和两个解决方案:

 *{box-sizing:border-box;color:#fff;font-family:arial;margin:0;padding:0;} div{ background:#000; border-radius:50%; display:inline-block; line-height:150px; margin:10px; text-align:center; vertical-align:top; width:150px; } p{ background:rgba(255,0,0,.25); } div:nth-of-type(2)>p{ border-radius:50%; } div:nth-of-type(3){ overflow:hidden; } 
 <div><p>Square hit area</p></div><div><p>Round hit area 1</p></div><div><p>Round hit area 2</p></div> 


If the child elements are images then you'll need the added trick of using an image map to crop their hit areas (Credit: Border-radius and :hover state area issue ), like so: 如果子元素是图像,那么您将需要使用图像映射来裁剪其命中区域的附加技巧(信用: 边界半径和:悬停状态区域问题 ),如下所示:

 *{box-sizing:border-box;color:#fff;font-family:arial;margin:0;padding:0;} div{ background:#000; border-radius:50%; display:inline-block; margin:10px; text-align:center; vertical-align:top; width:calc(33% - 20px); max-width:600px; } img{ display:block; cursor:pointer; height:auto; width:100%; } div:nth-of-type(2)>img{ border-radius:50%; } div:nth-of-type(3){ overflow:hidden; } 
 <div><img alt="" height="600" src="http://lorempixel.com/600/600/nature/3/" width="600"></div><div><img alt="" height="600" src="http://lorempixel.com/600/600/nature/3/" width="600" usemap="circle"></div><div><img alt="" height="600" src="http://lorempixel.com/600/600/nature/3/" width="600" usemap="circle"></div> <map name="circle"><area shape="circle" coords="0,100%,100%,100%"></map> 

I've seemed to find a way around it, if the parent element has overflow hidden and you just the image z-index to -1 or something lower than the parent it also works. 我似乎找到了解决方法,如果父元素隐藏了overflow ,你只需要将图像z-index为-1或低于父元素它也可以工作。 Don't know why though 不知道为什么

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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