检查这个jsFiddle。
橙色条用作进度条,圆圈下方的值是进度条的高度。
任何想法为什么overflow:hidden;
被忽视以及如何解决这个问题?显然,任何东西都不应该超出这个圈子。
还有更好的解决方案吗?
检查这个jsFiddle。
橙色条用作进度条,圆圈下方的值是进度条的高度。
任何想法为什么overflow:hidden;
被忽视以及如何解决这个问题?显然,任何东西都不应该超出这个圈子。
还有更好的解决方案吗?
稍微修改了你的小提琴。链接在这里
修改:将.outerContainer
css 更改为display:block
fromdisplay:table
并添加margin-top:30px
到p
css
检查这是否适合您。
这与 jQuery 或任何 javascript 无关。实际上,如果您删除所有 javascript 并使用 li:hover 上的 css 操作 .progressBar 的高度,无论如何您都会注意到该错误。
据报道,这似乎是浏览器问题:https ://code.google.com/p/chromium/issues/detail?id=157218
作为一种解决方法,尝试向掩码元素添加一个不易察觉的 css 变换:
.outerContainer {
-webkit-transform: rotate(0.000001deg);
}
将关卡类放在outerContainer div 中,并将关卡类中的span 设置为相对定位。在 JavaScript 中,要计算级别,除以 10 而不是 100 以获得完美的圆形悬停效果。
这是一个小提琴。
HTML
<div class="outerContainer">
<div class="innerContainer">
<p>Circle 3</p>
<span class="progressBar"></span>
</div>
<div class="level"><span>75</span>
</div>
</div>
CSS
body {
background: blue;
}
#circles {
text-align: center;
margin: 100px 0;
}
li {
display: inline-block;
margin: 0 10px;
position: relative;
}
.outerContainer {
position: relative;
display: block;
height: 96px;
width: 96px;
overflow: hidden;
background: #fff;
border: 2px solid #fff;
-webkit-border-radius: 50px;
border-radius: 50px;
}
.innerContainer {
display: table-cell;
vertical-align: middle;
width: 100%;
margin: 0 auto;
text-align: center;
}
p {
color: #000;
width: 96px;
position: relative;
z-index: 2;
}
.progressBar {
display: block;
width: 100%;
height: 0;
position: absolute;
bottom: 0;
left: 0;
background: #ec6730;
}
.level span{
position:relative;
}
JS
$(function() {
$("#circles li").hover(function(){
var thisElement = $(this);
var level = $(this).find(".level").text();
var elementHeight = $(this).find(".outerContainer").height();
level = (level/10)*elementHeight;
$(thisElement).find(".progressBar").stop().animate({
height: level
}, 300);
}, function() {
var thisElement = $(this);
$(".progressBar").stop().animate({
height: 0
}, 300);
});
});
您只需要更改您的.outerContainer
课程,它就可以正常工作!
.outerContainer {
position: relative;
display: block;
height: 96px;
width: 96px;
overflow: hidden;
background: #fff;
border: 2px solid #fff;
-webkit-border-radius: 50px;
border-radius: 50px;
}
position: absolute
并且overflow: hidden
似乎与display: table/table-cell
. 删除您在其中的表格内容以垂直居中文本可以解决问题。至少在 Firefox 中。
我觉得是浏览器的问题...
这是CSS3版本...
.progressBar {
display: block;
width: 100%;
height: 0;
position: absolute;
bottom: 0;
left: 0;
background: #ec6730;
transition: height 1s;
}
.innerContainer:hover > .progressBar {
height: 300px;
}
它不再闪烁,因为浏览器处理了这项工作(不是 js 循环动画......)。但它仍然显示了动画完成的优势!!!这可能是浏览器的问题......可能是一个错误......
display: table
在 CSS 定位方面效果不佳;
你应该避免使用它,并找到一些其他方法来垂直居中你的标签。
如果你的圆圈有一个已知的高度,就像你的代码似乎表明(height:96px
ecc),那么只需使用一个固定的顶部位置来absolute
定位<p>
元素:
请注意,您甚至不需要 jQuery,这一切都可以通过 CSS3 实现(除非您的目标是旧浏览器)