2017-09-28 3 views
1

私は多段階のフォームで作業しています。私はorbsの下に線を作成する方法は不明ですが、ステップ/アクティブ/通過した側面をどのようにしてキーラインを変更するかについてもわかりません。私はこのデザインに近いものが必要です。ここアクティブなステップとラインを持つマルチステップフォーム

は私の最新jsfiddle http://jsfiddle.net/39sg7f3n/20/

enter image description here

私の現在のコード

HTML

<ul className="form-steps"> 
    <li className={page === 1 ? 'active' : ''}><span><Icon type="rocket" /></span>Step 1</li> 
    <li className={page === 2 ? 'active' : ''}><span><Icon type="rocket" /></span>Step 2</li> 
    <li className={page === 3 ? 'active' : ''}><span><Icon type="rocket" /></span>Step 3</li> 
    <li className={page === 4 ? 'active' : ''}><span><Icon type="rocket" /></span>Step 4</li> 
</ul> 

CSS

.form-steps{ 
    overflow:hidden; 
    text-align: center; 

    li{ 
     float:left; 
     margin-right: 10px; 

     span{ 
      background: red; 
      border-radius: 100%; 
      width: 50px; 
      height: 50px; 
      display: block; 
      font-size: 25px; 
      line-height: 50px; 
     } 
    } 
} 
です似ているが、異なる設計 -

ので、これは現在

.form-steps{ 
 
    \t overflow:hidden; 
 
    \t text-align: center; 
 
    } 
 
    .form-steps li{ 
 
    \t \t float:left; 
 
    \t \t margin-right: 10px; 
 
    } 
 
    .form-steps li span{ 
 
    \t background: red; 
 
    \t border-radius: 100%; 
 
    \t width: 50px; 
 
    \t height: 50px; 
 
    \t display: block; 
 
    \t font-size: 25px; 
 
    \t line-height: 50px; 
 
    }
<ul class="form-steps"> 
 
    <li class="active"><span><Icon type="rocket" /></span>Step 1</li> 
 
    <li class="active"><span><Icon type="rocket" /></span>Step 2</li> 
 
    <li><span><Icon type="rocket" /></span>Step 3</li> 
 
    <li><span><Icon type="rocket" /></span>Step 4</li> 
 
</ul>

のように見えることがあり、私が手に、コードの古いビットを持ってリファクタリング。

ul{list-style:none;} 
 
\t ul li{float:left;} 
 
\t ul li.active span{color:orange;} 
 
\t ul li.inactive span{color:gray;} 
 
\t ul li span{display: block;position: relative;text-align: center;padding: 25px;} 
 
\t ul li span:first-child:after{content: '';position: absolute;width: 10px;height: 10px;border-radius: 50%;bottom: -8px;left: calc(50% - 5px);z-index:1;} 
 
\t ul li.active span:first-child:after{border: 3px solid orange;background-color: white;} 
 
\t ul li.inactive span:first-child:after{border: 3px solid gray;background-color: white;} 
 
\t ul li:first-child span:last-child:after{content: '';border-top: 1px solid gray;width: 50%;position: absolute;left: 50%;top: 0;} 
 
\t ul li:last-child span:last-child:before{content: '';border-top: 1px solid gray;width: 50%;position: absolute;left: 0;top: 0;} 
 
\t ul li:not(:last-child) span:last-child:after{content: '';border-top: 1px solid gray;width: 50%;position: absolute;left: 50%;top: 0;} 
 
\t ul li:not(:first-child) span:last-child:before{content: '';border-top: 1px solid gray;width: 50%;position: absolute;left: 0;top: 0;}
<ul> 
 
\t <li class="active"><span>Call</span><span>Completed</span></li> 
 
\t <li class="inactive"><span>Proposal</span><span>Waiting</span></li> 
 
\t <li class="inactive"><span>Hire</span><span></span></li> 
 
\t </ul>

+0

と古いjsfiddle - http://jsfiddle.net/39sg7f3n/9/ –

+0

最新jsfiddle - http://jsfiddle.net/39sg7f3n/12/ –

+0

のhttp:// jsfiddle.net/39sg7f3n/13/ –

答えて

0

スニペットの下に試してみてください。

.wizard-progress { 
 
    list-style: none; 
 
    list-style-image: none; 
 
    padding: 0; 
 
    white-space: nowrap; 
 
} 
 

 
.wizard-progress li { 
 
    float: left; 
 
    text-align: center; 
 
    position: relative; 
 
} 
 

 
.wizard-progress .step-name { 
 
    display: table-cell; 
 
    height: 32px; 
 
    vertical-align: bottom; 
 
    text-align: center; 
 
    width: 100%; 
 
} 
 

 
.wizard-progress .step-num { 
 
    font-size: 14px; 
 
    font-weight: bold; 
 
    border: 3px solid darkgray; 
 
    background-color: darkgray; 
 
    border-radius: 50%; 
 
    width: 24px; 
 
    display: inline-block; 
 
    margin-top: 10px; 
 
    color: #fff; 
 
} 
 

 
.wizard-progress .step-num:after { 
 
    content: ""; 
 
    display: block; 
 
    background: darkgray; 
 
    height: 1px; 
 
    width: 130%; 
 
    /* 130px; */ 
 
    position: absolute; 
 
    bottom: 45px; 
 
} 
 

 
.wizard-progress li:last-of-type .step-num:after { 
 
    display: none; 
 
} 
 
.step-done .step-num::after{ 
 
background-color:#000; 
 
} 
 

 
.wizard-progress .step-done .step-num, 
 
.wizard-progress .step-active .step-num { 
 
    border-color: #000; 
 
    background-color: #000; 
 
} 
 

 
.wizard-progress .step-active .step-name { 
 
    font-weight: bold; 
 
} 
 

 

 
/* wizard with 5 steps */ 
 

 
.wizard-5-steps { 
 
    width: 750px; 
 
} 
 

 
.wizard-5-steps li { 
 
    margin-right: 6.9%; 
 
    /* 6.6687%; 50px */ 
 
    width: 13%; 
 
} 
 

 
.wizard-5-steps .step-num:after { 
 
    left: 62%; 
 
} 
 

 

 
/* wizard with 6 steps */ 
 

 
.wizard-6-steps { 
 
    width: 750px; 
 
} 
 

 
.wizard-6-steps li { 
 
    float: left; 
 
    margin-right: 5.5%; 
 
    /* 6.6687%; 50px */ 
 
    width: 11%; 
 
} 
 

 
.wizard-6-steps .step-num:after { 
 
    left: 64%; 
 
}
<div class="container center-block"> 
 
    <ol class="wizard-progress wizard-5-steps clearfix center-block"> 
 
    <li class="step-done"> 
 
     <span class="step-num">1</span> 
 
     <span class="step-name">program</span> 
 
    </li> 
 
    <li class="step-done"> 
 
     <span class="step-num">2</span> 
 
     <span class="step-name">appointment</span> 
 
    </li> 
 
    <li class="step-active"> 
 
     <span class="step-num">3</span> 
 
     <span class="step-name">time</span> 
 
    </li> 
 
    <li> 
 
     <span class="step-num">4</span> 
 
     <span class="step-name">contact</span> 
 
    </li> 
 
    <li> 
 
     <span class="step-num">5</span> 
 
     <span class="step-name">review</span> 
 
    </li> 
 
    </ol> 
 
</div>
のJavaScriptとjQueryを使用して更新 fiddler

+0

あなたは少し潰れて見えます。 –

+0

更新されたものを確認してください。ウィザードの変更に対してのみこれをお勧めします。ステップ番号をアイコンで更新できます。 –

+0

ここに私の最新のjsfiddleです - http://jsfiddle.net/39sg7f3n/11/ –

0

マルチステップフォームを確認してください。

//jQuery time 
 
var current_fs, next_fs, previous_fs; //fieldsets 
 
var left, opacity, scale; //fieldset properties which we will animate 
 
var animating; //flag to prevent quick multi-click glitches 
 

 
$(".next").click(function() { 
 
    if (animating) return false; 
 
    animating = true; 
 

 
    current_fs = $(this).parent(); 
 
    next_fs = $(this).parent().next(); 
 

 
    //activate next step on progressbar using the index of next_fs 
 
    $("#progressbar li").eq($("fieldset").index(next_fs)).addClass("active"); 
 

 
    //show the next fieldset 
 
    next_fs.show(); 
 
    //hide the current fieldset with style 
 
    current_fs.animate({ 
 
    opacity: 0 
 
    }, { 
 
    step: function(now, mx) { 
 
     //as the opacity of current_fs reduces to 0 - stored in "now" 
 
     //1. scale current_fs down to 80% 
 
     scale = 1 - (1 - now) * 0.2; 
 
     //2. bring next_fs from the right(50%) 
 
     left = (now * 50) + "%"; 
 
     //3. increase opacity of next_fs to 1 as it moves in 
 
     opacity = 1 - now; 
 
     current_fs.css({ 
 
     'transform': 'scale(' + scale + ')', 
 
     'position': 'absolute' 
 
     }); 
 
     next_fs.css({ 
 
     'left': left, 
 
     'opacity': opacity 
 
     }); 
 
    }, 
 
    duration: 800, 
 
    complete: function() { 
 
     current_fs.hide(); 
 
     animating = false; 
 
    }, 
 
    //this comes from the custom easing plugin 
 
    easing: 'easeInOutBack' 
 
    }); 
 
}); 
 

 
$(".previous").click(function() { 
 
    if (animating) return false; 
 
    animating = true; 
 

 
    current_fs = $(this).parent(); 
 
    previous_fs = $(this).parent().prev(); 
 

 
    //de-activate current step on progressbar 
 
    $("#progressbar li").eq($("fieldset").index(current_fs)).removeClass("active"); 
 

 
    //show the previous fieldset 
 
    previous_fs.show(); 
 
    //hide the current fieldset with style 
 
    current_fs.animate({ 
 
    opacity: 0 
 
    }, { 
 
    step: function(now, mx) { 
 
     //as the opacity of current_fs reduces to 0 - stored in "now" 
 
     //1. scale previous_fs from 80% to 100% 
 
     scale = 0.8 + (1 - now) * 0.2; 
 
     //2. take current_fs to the right(50%) - from 0% 
 
     left = ((1 - now) * 50) + "%"; 
 
     //3. increase opacity of previous_fs to 1 as it moves in 
 
     opacity = 1 - now; 
 
     current_fs.css({ 
 
     'left': left 
 
     }); 
 
     previous_fs.css({ 
 
     'transform': 'scale(' + scale + ')', 
 
     'opacity': opacity 
 
     }); 
 
    }, 
 
    duration: 800, 
 
    complete: function() { 
 
     current_fs.hide(); 
 
     animating = false; 
 
    }, 
 
    //this comes from the custom easing plugin 
 
    easing: 'easeInOutBack' 
 
    }); 
 
}); 
 

 
$(".submit").click(function() { 
 
    return false; 
 
})
/*custom font*/ 
 

 
@import url(https://fonts.googleapis.com/css?family=Montserrat); 
 

 
/*basic reset*/ 
 

 
* { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
html { 
 
    height: 100%; 
 
    /*Image only BG fallback*/ 
 
    /*background = gradient + image pattern combo*/ 
 
    background: linear-gradient(rgba(196, 102, 0, 0.6), rgba(155, 89, 182, 0.6)); 
 
} 
 

 
body { 
 
    font-family: montserrat, arial, verdana; 
 
} 
 

 

 
/*form styles*/ 
 

 
#msform { 
 
    width: 400px; 
 
    margin: 50px auto; 
 
    text-align: center; 
 
    position: relative; 
 
} 
 

 
#msform fieldset { 
 
    background: white; 
 
    border: 0 none; 
 
    border-radius: 3px; 
 
    box-shadow: 0 0 15px 1px rgba(0, 0, 0, 0.4); 
 
    padding: 20px 30px; 
 
    box-sizing: border-box; 
 
    width: 80%; 
 
    margin: 0 10%; 
 
    /*stacking fieldsets above each other*/ 
 
    position: relative; 
 
} 
 

 

 
/*Hide all except first fieldset*/ 
 

 
#msform fieldset:not(:first-of-type) { 
 
    display: none; 
 
} 
 

 

 
/*inputs*/ 
 

 
#msform input, 
 
#msform textarea { 
 
    padding: 15px; 
 
    border: 1px solid #ccc; 
 
    border-radius: 3px; 
 
    margin-bottom: 10px; 
 
    width: 100%; 
 
    box-sizing: border-box; 
 
    font-family: montserrat; 
 
    color: #2c3e50; 
 
    font-size: 13px; 
 
} 
 

 

 
/*buttons*/ 
 

 
#msform .action-button { 
 
    width: 100px; 
 
    background: #27ae60; 
 
    font-weight: bold; 
 
    color: white; 
 
    border: 0 none; 
 
    border-radius: 1px; 
 
    cursor: pointer; 
 
    padding: 10px 5px; 
 
    margin: 10px 5px; 
 
} 
 

 
#msform .action-button:hover, 
 
#msform .action-button:focus { 
 
    box-shadow: 0 0 0 2px white, 0 0 0 3px #27ae60; 
 
} 
 

 

 
/*headings*/ 
 

 
.fs-title { 
 
    font-size: 15px; 
 
    text-transform: uppercase; 
 
    color: #2c3e50; 
 
    margin-bottom: 10px; 
 
} 
 

 
.fs-subtitle { 
 
    font-weight: normal; 
 
    font-size: 13px; 
 
    color: #666; 
 
    margin-bottom: 20px; 
 
} 
 

 

 
/*progressbar*/ 
 

 
#progressbar { 
 
    margin-bottom: 30px; 
 
    overflow: hidden; 
 
    /*CSS counters to number the steps*/ 
 
    counter-reset: step; 
 
} 
 

 
#progressbar li { 
 
    list-style-type: none; 
 
    color: white; 
 
    text-transform: uppercase; 
 
    font-size: 9px; 
 
    width: 33.33%; 
 
    float: left; 
 
    position: relative; 
 
} 
 

 
#progressbar li:before { 
 
    content: counter(step); 
 
    counter-increment: step; 
 
    width: 20px; 
 
    line-height: 20px; 
 
    display: block; 
 
    font-size: 10px; 
 
    color: #333; 
 
    background: white; 
 
    border-radius: 3px; 
 
    margin: 0 auto 5px auto; 
 
} 
 

 

 
/*progressbar connectors*/ 
 

 
#progressbar li:after { 
 
    content: ""; 
 
    width: 100%; 
 
    height: 2px; 
 
    background: white; 
 
    position: absolute; 
 
    left: -50%; 
 
    top: 9px; 
 
    z-index: -1; 
 
    /*put it behind the numbers*/ 
 
} 
 

 
#progressbar li:first-child:after { 
 
    /*connector not needed before the first step*/ 
 
    content: none; 
 
} 
 

 

 
/*marking active/completed steps green*/ 
 

 

 
/*The number of the step and the connector before it = green*/ 
 

 
#progressbar li.active:before, 
 
#progressbar li.active:after { 
 
    background: #27ae60; 
 
    color: white; 
 
}
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.2.1.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js"></script> 
 
<!-- multistep form --> 
 
<form id="msform"> 
 
    <!-- progressbar --> 
 
    <ul id="progressbar"> 
 
    <li class="active">Account Setup</li> 
 
    <li>Social Profiles</li> 
 
    <li>Personal Details</li> 
 
    </ul> 
 
    <!-- fieldsets --> 
 
    <fieldset> 
 
    <h2 class="fs-title">Create your account</h2> 
 
    <h3 class="fs-subtitle">This is step 1</h3> 
 
    <input type="text" name="email" placeholder="Email" /> 
 
    <input type="password" name="pass" placeholder="Password" /> 
 
    <input type="password" name="cpass" placeholder="Confirm Password" /> 
 
    <input type="button" name="next" class="next action-button" value="Next" /> 
 
    </fieldset> 
 
    <fieldset> 
 
    <h2 class="fs-title">Social Profiles</h2> 
 
    <h3 class="fs-subtitle">Your presence on the social network</h3> 
 
    <input type="text" name="twitter" placeholder="Twitter" /> 
 
    <input type="text" name="facebook" placeholder="Facebook" /> 
 
    <input type="text" name="gplus" placeholder="Google Plus" /> 
 
    <input type="button" name="previous" class="previous action-button" value="Previous" /> 
 
    <input type="button" name="next" class="next action-button" value="Next" /> 
 
    </fieldset> 
 
    <fieldset> 
 
    <h2 class="fs-title">Personal Details</h2> 
 
    <h3 class="fs-subtitle">We will never sell it</h3> 
 
    <input type="text" name="fname" placeholder="First Name" /> 
 
    <input type="text" name="lname" placeholder="Last Name" /> 
 
    <input type="text" name="phone" placeholder="Phone" /> 
 
    <textarea name="address" placeholder="Address"></textarea> 
 
    <input type="button" name="previous" class="previous action-button" value="Previous" /> 
 
    <input type="submit" name="submit" class="submit action-button" value="Submit" /> 
 
    </fieldset> 
 
</form>

+0

- 反応と還元形を使用して - ちょうどトップなどのステップが必要です。 –

+0

ここは私の最新のjsfiddleです - http://jsfiddle.net/39sg7f3n/11/ –

+0

http://jsfiddle.net/39sg7f3n/ 12/ –

関連する問題