Flexbox进度条动画 - 宽度不正确 [英] Flexbox Progress Bar Animation - Incorrect Width
问题描述
width()
函数,而且我试过把每个段加起来,但是每次出于某种原因,文本都会抛出宽度。 这就是我的 - JSFiddle
$ b
/ **进度栏动画** / function animate_progress_bar(){if(!$( '.progressBar')。length){return false; ($。(this).find('。seg')。length; var num_fill = $(this).find('。fill')。length ; var percent = 100 - ((num_fill / num_total)* 100); var speed = 2000 / num_fill; $(this).find('.progradient')。animate({'width':percent +'%'}, ();});} animate_progress_bar();
flex {display:-webkit-flex; display:flex;}。flex> * {-ms-flex:0 1 auto;}。progressBar {display:-webkit-flex;显示:flex; border:1px solid#000; border-radius:20px;溢出:隐藏;位置:相对; margin-bottom:40px;} progressBar .seg {-webkit-flex-grow:1; flex-grow:1; min-height:20px; border-right:1px solid#000; progressBar .seg:last-of-type {border-right:0;} progressBar:before {content:'';位置:绝对;顶部:0;左:0; z-index:1;宽度:100%;身高:100%背景:rgb(30,87,153);背景:-moz-linear-gradient(左,rgba(30,87,153,1)0%,rgba(41,137,216,1)27%,rgba(30,87,153,1)74% rgba(125,185,232,1)100%);背景:-webkit-线性梯度(左,rgba(30,87,153,1)0%,rgba(41,137,216,1)27%,rgba(30,87,153,1)74%, rgba(125,185,232,1)100%);背景:线性梯度(右边),rgba(30,87,153,1)0%,rgba(41,137,216,1)27%,rgba(30,87,153,1)74%,rgba 125,185,232,1)100%); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr ='#1e5799',endColorstr ='#7db9e8',GradientType = 1);} progressBar .progradient {position:absolute;顶部:0;正确:0; z-index:1;宽度:100%;身高:100% progressBar.large.seg {min-height:40px;}。progressBar.large .text {-webkit-flex-grow:1; flex-grow:1; -webkit-align-self:center; align-self:center; font-size:18px; text-align:center;}
< script src = https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js\"></script><div style =max-width:160px> < div class =progressBar small> < div class =seg fill>< / div> < div class =seg fill>< / div> < div class =seg>< / div> < div class =seg>< / div> < div class =seg>< / div> < div class =progradient>< / div> < / div>< / div>< div class =progressBar large> < div class =seg fill>< / div> < div class =seg fill>< / div> < div class =seg fill>< / div> < div class =seg>< / div> < div class =seg>< / div> < div class =progradient>< / div>< / div>< div class =progressBar large> < div class =seg fill flex> < div class =text>测试< / div> < / DIV> < div class =seg fill flex> < div class =text>测试< / div> < / DIV> < div class =seg fill flex> < div class =text>测试< / div> < / DIV> < div class =seg>< / div> < div class =seg>< / div> < div class =progradient>< / div>< / div>
您只需将 flex:1;
添加到您的细分类中即可。
$ blockquote
flex:< positive-number>
:
相当于flex:< positive-number> 1 0
。使flex项目具有灵活性并将flex基础设置为零,
导致接收flex容器中
可用空间的指定比例的项目。如果弹性容器
中的所有项目都使用此模式,则其大小将与指定的
弹性系数成比例。
资料来源: W3C 类别变更: 代码段: I'm trying to create a progress bar with an animation. It works if I don't have inner text but as soon as I add the inner text the width calculations are different for some reason. I've tried working with the different Here's what I have - JSFiddle
You just need to add flex: Equivalent to flex: Source: W3C Class changed:
Code Snippet:
这篇关于Flexbox进度条动画 - 宽度不正确的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
.progressBar.large .seg {
min-height:40px;
flex:1; / *增加的财产* /
}
$ b / ** Progress Bar Animation ** / function animate_progress_bar(){if(!$('。progressBar')。length){return false; ($。(this).find('。seg')。length; var num_fill = $(this).find('。fill')。length ; var percent = 100 - ((num_fill / num_total)* 100); var speed = 2000 / num_fill; $(this).find('.progradient')。animate({'width':percent +'%'}, ();});} animate_progress_bar();
flex {display:-webkit-flex; display:flex;}。flex> * {-ms-flex:0 1 auto;}。progressBar {display:-webkit-flex;显示:flex; border:1px solid#000; border-radius:20px;溢出:隐藏;位置:相对; margin-bottom:40px;} progressBar .seg {-webkit-flex-grow:1; flex-grow:1; min-height:20px; border-right:1px solid#000; progressBar .seg:last-of-type {border-right:0;} progressBar:before {content:'';位置:绝对;顶部:0;左:0; z-index:1;宽度:100%;身高:100%背景:rgb(30,87,153);背景:-moz-linear-gradient(左,rgba(30,87,153,1)0%,rgba(41,137,216,1)27%,rgba(30,87,153,1)74% rgba(125,185,232,1)100%);背景:-webkit-线性梯度(左,rgba(30,87,153,1)0%,rgba(41,137,216,1)27%,rgba(30,87,153,1)74%, rgba(125,185,232,1)100%);背景:线性梯度(右边),rgba(30,87,153,1)0%,rgba(41,137,216,1)27%,rgba(30,87,153,1)74%,rgba 125,185,232,1)100%); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr ='#1e5799',endColorstr ='#7db9e8',GradientType = 1);} progressBar .progradient {position:absolute;顶部:0;正确:0; z-index:1;宽度:100%;身高:100% progressBar.large {border-radius:40px;}。progressBar.large .seg {min-height:40px; flex:1;}。progressBar.large .text {-webkit-flex-grow:1; flex-grow:1; -webkit-align-self:center; align-self:center; font-size:18px; text-align:center;}
< script src = https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js\"></script><div style =max-width:160px> < div class =progressBar small> < div class =seg fill>< / div> < div class =seg fill>< / div> < div class =seg>< / div> < div class =seg>< / div> < div class =seg>< / div> < div class =progradient>< / div> < / div>< / div>< div class =progressBar large> < div class =seg fill>< / div> < div class =seg fill>< / div> < div class =seg fill>< / div> < div class =seg>< / div> < div class =seg>< / div> < div class =progradient>< / div>< / div>< div class =progressBar large> < div class =seg fill flex> < div class =text>测试< / div> < / DIV> < div class =seg fill flex> < div class =text>测试< / div> < / DIV> < div class =seg fill flex> < div class =text>测试< / div> < / DIV> < div class =seg>< / div> < div class =seg>< / div> < div class =progradient>< / div>< / div> width()
functions and I've tried adding up each segment but every time the text throws off the width for some reason./** Progress Bar Animation **/
function animate_progress_bar() {
if (!$('.progressBar').length) {
return false;
}
$('.progressBar').each(function() {
var num_total = $(this).find('.seg').length;
var num_fill = $(this).find('.fill').length;
var percent = 100 - ((num_fill / num_total) * 100);
var speed = 2000 / num_fill;
$(this).find('.progradient').animate({
'width': percent + '%'
}, speed);
});
}
animate_progress_bar();
.flex {
display: -webkit-flex;
display: flex;
}
.flex > * {
-ms-flex: 0 1 auto;
}
.progressBar {
display: -webkit-flex;
display: flex;
border: 1px solid #000;
border-radius: 20px;
overflow: hidden;
position: relative;
margin-bottom: 40px;
}
.progressBar .seg {
-webkit-flex-grow: 1;
flex-grow: 1;
min-height: 20px;
border-right: 1px solid #000;
z-index: 2;
}
.progressBar .seg:last-of-type {
border-right: 0;
}
.progressBar:before {
content: '';
position: absolute;
top: 0;
left: 0;
z-index: 1;
width: 100%;
height: 100%;
background: rgb(30, 87, 153);
background: -moz-linear-gradient(left, rgba(30, 87, 153, 1) 0%, rgba(41, 137, 216, 1) 27%, rgba(30, 87, 153, 1) 74%, rgba(125, 185, 232, 1) 100%);
background: -webkit-linear-gradient(left, rgba(30, 87, 153, 1) 0%, rgba(41, 137, 216, 1) 27%, rgba(30, 87, 153, 1) 74%, rgba(125, 185, 232, 1) 100%);
background: linear-gradient(to right, rgba(30, 87, 153, 1) 0%, rgba(41, 137, 216, 1) 27%, rgba(30, 87, 153, 1) 74%, rgba(125, 185, 232, 1) 100%);
filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#1e5799', endColorstr='#7db9e8', GradientType=1);
}
.progressBar .progradient {
position: absolute;
top: 0;
right: 0;
z-index: 1;
width: 100%;
height: 100%;
background-color: #fff;
}
.progressBar.large {
border-radius: 40px;
}
.progressBar.large .seg {
min-height: 40px;
}
.progressBar.large .text {
-webkit-flex-grow: 1;
flex-grow: 1;
-webkit-align-self: center;
align-self: center;
font-size: 18px;
text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div style="max-width: 160px">
<div class="progressBar small">
<div class="seg fill"></div>
<div class="seg fill"></div>
<div class="seg"></div>
<div class="seg"></div>
<div class="seg"></div>
<div class="progradient"></div>
</div>
</div>
<div class="progressBar large">
<div class="seg fill"></div>
<div class="seg fill"></div>
<div class="seg fill"></div>
<div class="seg"></div>
<div class="seg"></div>
<div class="progradient"></div>
</div>
<div class="progressBar large">
<div class="seg fill flex">
<div class="text">Test</div>
</div>
<div class="seg fill flex">
<div class="text">Test</div>
</div>
<div class="seg fill flex">
<div class="text">Test</div>
</div>
<div class="seg"></div>
<div class="seg"></div>
<div class="progradient"></div>
</div>
flex: 1;
to your segment class.
<positive-number>
: <positive-number> 1 0
. Makes the flex item flexible and sets the flex basis to zero,
resulting in an item that receives the specified proportion of the
free space in the flex container. If all items in the flex container
use this pattern, their sizes will be proportional to the specified
flex factor.
.progressBar.large .seg {
min-height: 40px;
flex: 1; /* Added property*/
}
/** Progress Bar Animation **/
function animate_progress_bar() {
if (!$('.progressBar').length) {
return false;
}
$('.progressBar').each(function() {
var num_total = $(this).find('.seg').length;
var num_fill = $(this).find('.fill').length;
var percent = 100 - ((num_fill / num_total) * 100);
var speed = 2000 / num_fill;
$(this).find('.progradient').animate({
'width': percent + '%'
}, speed);
});
}
animate_progress_bar();
.flex {
display: -webkit-flex;
display: flex;
}
.flex > * {
-ms-flex: 0 1 auto;
}
.progressBar {
display: -webkit-flex;
display: flex;
border: 1px solid #000;
border-radius: 20px;
overflow: hidden;
position: relative;
margin-bottom: 40px;
}
.progressBar .seg {
-webkit-flex-grow: 1;
flex-grow: 1;
min-height: 20px;
border-right: 1px solid #000;
z-index: 2;
}
.progressBar .seg:last-of-type {
border-right: 0;
}
.progressBar:before {
content: '';
position: absolute;
top: 0;
left: 0;
z-index: 1;
width: 100%;
height: 100%;
background: rgb(30, 87, 153);
background: -moz-linear-gradient(left, rgba(30, 87, 153, 1) 0%, rgba(41, 137, 216, 1) 27%, rgba(30, 87, 153, 1) 74%, rgba(125, 185, 232, 1) 100%);
background: -webkit-linear-gradient(left, rgba(30, 87, 153, 1) 0%, rgba(41, 137, 216, 1) 27%, rgba(30, 87, 153, 1) 74%, rgba(125, 185, 232, 1) 100%);
background: linear-gradient(to right, rgba(30, 87, 153, 1) 0%, rgba(41, 137, 216, 1) 27%, rgba(30, 87, 153, 1) 74%, rgba(125, 185, 232, 1) 100%);
filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#1e5799', endColorstr='#7db9e8', GradientType=1);
}
.progressBar .progradient {
position: absolute;
top: 0;
right: 0;
z-index: 1;
width: 100%;
height: 100%;
background-color: #fff;
}
.progressBar.large {
border-radius: 40px;
}
.progressBar.large .seg {
min-height: 40px;
flex: 1;
}
.progressBar.large .text {
-webkit-flex-grow: 1;
flex-grow: 1;
-webkit-align-self: center;
align-self: center;
font-size: 18px;
text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div style="max-width: 160px">
<div class="progressBar small">
<div class="seg fill"></div>
<div class="seg fill"></div>
<div class="seg"></div>
<div class="seg"></div>
<div class="seg"></div>
<div class="progradient"></div>
</div>
</div>
<div class="progressBar large">
<div class="seg fill"></div>
<div class="seg fill"></div>
<div class="seg fill"></div>
<div class="seg"></div>
<div class="seg"></div>
<div class="progradient"></div>
</div>
<div class="progressBar large">
<div class="seg fill flex">
<div class="text">Test</div>
</div>
<div class="seg fill flex">
<div class="text">Test</div>
</div>
<div class="seg fill flex">
<div class="text">Test</div>
</div>
<div class="seg"></div>
<div class="seg"></div>
<div class="progradient"></div>
</div>