2016-08-11 6 views
12

Ich versuche, in diesen entworfenen Fluss/progress Diagramm zu bauen HTML/CSS/jQuery>Progess Grafik in CSS

enter image description here und denken kann, nicht, wie die verschiedenen gestapelte Reihen machen umfassen einen Pfeil nach unten und dann einem umgekehrter Pfeil basierend auf der Richtung der vorherigen Reihe mit den Schritten von rechts nach links, dann von links nach rechts, dann von rechts nach links etc ...

Dies muss alles reagieren ... Ich habe es funktioniert Eine traditionelle Art und Weise gemäß Codebeispiel hier -

function sortFlowChartArrows() { 
 

 
/* clear prev arrow */ 
 

 
$('.arrow-right').each(function() { 
 
$(this).remove(); 
 
}); 
 

 
$('.arrow-down').each(function() { 
 
$(this).remove(); 
 
}); 
 

 

 
var windowWidthSize = $(window).width(); 
 

 
if (windowWidthSize >= 450) { 
 

 
$('.projectStatusWrapper li:not(:last-child)').each(function() { 
 
\t $(this).after("<div class='arrow-right'></div>") 
 
\t 
 
}); 
 

 
} 
 

 
if (windowWidthSize <= 449) { 
 

 
$('.projectStatusWrapper li:not(:last-child)').each(function() { 
 
\t $(this).after("<div class='arrow-down'></div>") 
 
\t 
 
}); 
 

 
} 
 

 
} 
 

 
sortFlowChartArrows(); 
 

 
$(window).load(function() { sortFlowChartArrows(); }); 
 
$(window).resize(function() { sortFlowChartArrows(); }); 
 

 

 

 
/* PROJECT FLOW CHART - MAKE ALL LIS SAME HEIGHT */ 
 

 
function makeallflowchartLIsSameHeight() { 
 

 
/* clear value */ 
 
$('.projectStatusWrapper li span').each(function() { 
 
\t $(this).css("height","") 
 
}) 
 

 
var flowchartLIHeight = Math.max.apply(null, $(".projectStatusWrapper li").map(function() { 
 
return $(this).height(); 
 
}).get()); 
 

 
console.log(flowchartLIHeight) 
 

 
$('.projectStatusWrapper li span').each(function() { 
 
\t $(this).css("height",flowchartLIHeight+"px") 
 
}); 
 
\t 
 
} 
 

 

 
makeallflowchartLIsSameHeight(); 
 

 
$(window).load(function() { makeallflowchartLIsSameHeight(); }); 
 
$(window).resize(function() { makeallflowchartLIsSameHeight(); });
.projectStatusWrapper { 
 
width: 100%; 
 
float: left; \t 
 
} 
 
.projectStatusWrapper ul { 
 
margin: 0; 
 
padding: 0; 
 
} 
 
.projectStatusWrapper li { 
 
display: inline-table; 
 
padding: 0; 
 
margin: 0; 
 
list-style: none; 
 
border: 2px solid #74b4df; \t 
 

 

 
-webkit-border-radius: 10px 10px 10px 10px; 
 
border-radius: 10px 10px 10px 10px; 
 
margin: 0.5%; 
 
font-weight: 400; 
 
font-family: 'FFMarkWebProHeavy', Helvetica, Arial; 
 

 
width: 17%; 
 
vertical-align: middle; 
 
text-align: center; 
 
} 
 
.projectStatusWrapper li span { 
 
display: table-cell; 
 
vertical-align: middle; 
 
text-align: center; 
 
padding: 15px 20px; 
 
} 
 
.projectStatusWrapper li.complete { 
 
background-color: #74b4df; 
 
color: #fff; 
 
} 
 
.arrow-right { 
 
width: 0; 
 
height: 0; 
 
border-top: 15px solid transparent; 
 
border-bottom: 15px solid transparent; 
 
    
 
border-left: 15px solid #74b4df; 
 
display: inline-block; 
 
vertical-align: middle; 
 
} 
 
.arrow-left { 
 
width: 0; 
 
height: 0; 
 
border-top: 15px solid transparent; 
 
border-bottom: 15px solid transparent; 
 
    
 
border-right: 15px solid #74b4df; 
 
display: inline-block; 
 
vertical-align: middle; 
 
float: right; 
 
} 
 
.arrow-down { 
 
width: 0; 
 
height: 0; 
 
border-left: 15px solid transparent; 
 
border-right: 15px solid transparent; 
 
    
 
border-top: 15px solid #74b4df; 
 
display: inline-block; 
 
vertical-align: middle; 
 
text-align:center; 
 
    
 
position: relative; 
 
left: 43.5%; 
 
margin-top: 5px; 
 
margin-bottom: 5px; 
 
    
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="projectStatusWrapper"> 
 

 
<ul> 
 
<li class="complete">Step 1</li> 
 
<li class="complete">Step 2</li> 
 
<li>Step 3</li> 
 
<li>Step 4</li> 
 
<li>Step 5</li> 
 
<li>Step 6</li> 
 
<li>Step 7</li> 
 
<li>Step 8</li> 
 
<li>Step 9</li> 
 
<li>Step 10</li> 
 
</ul> 
 

 
</div>

Irgendwelche Ideen, wie man es wie im Design funktioniert?

+0

Was Ihre Zwänge sind, wenn überhaupt? Können Sie beispielsweise Flexbox- oder CSS-Spalten verwenden? (Ich weiß nicht, dass sie helfen würden, aber wenn man sie nicht benutzen kann/kann), wäre es gut, wenn die Leute es wissen. –

+0

Keine Einschränkungen - nur eine gute/intelligente Markup-Lösung, die in einem funktioniert responsive Weise, um die entworfene Lösung widerzuspiegeln. Ich möchte es aber so einfach wie möglich halten. – dubbs

Antwort

2

Ich hatte diese ziemlich einfache Idee, dass , wenn wir eine feste Anzahl von Spalten akzeptieren tatsächlich funktioniert. Grundsätzlich setze ich den Pfeil in :after und verwende nth-child(6n+...), um den Pfeilfall zu definieren. Sicherlich braucht eine Feinabstimmung, sowieso Codepen demo here

.projectStatusWrapper { 
 
    width: 100%; 
 
    float: left; 
 
} 
 

 
.projectStatusWrapper ul { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
.projectStatusWrapper li { 
 
    box-sizing: border-box; 
 
    width: 30.5%; 
 
    display: inline-block; 
 
    list-style: none; 
 
    border: 2px solid #74b4df; 
 
    padding: 1%; 
 
    margin: 1%; 
 
    -webkit-border-radius: 10px 10px 10px 10px; 
 
    border-radius: 10px 10px 10px 10px; 
 
    font-weight: 400; 
 
    font-family: 'FFMarkWebProHeavy', Helvetica, Arial; 
 
    position: relative; 
 
    vertical-align: middle; 
 
} 
 

 
.projectStatusWrapper li.complete { 
 
    background-color: #74b4df; 
 
    color: #fff; 
 
} 
 

 
.projectStatusWrapper li:after { 
 
    content: ''; 
 
    position: absolute; 
 
    z-index: 1; 
 
} 
 

 
.projectStatusWrapper li:nth-child(6n+4), 
 
.projectStatusWrapper li:nth-child(6n+5), 
 
.projectStatusWrapper li:nth-child(6n+6) { 
 
    float: right; 
 
} 
 

 
.projectStatusWrapper li:nth-child(6n+1):after, 
 
.projectStatusWrapper li:nth-child(6n+2):after { 
 
    top: 50%; 
 
    right: -19px; 
 
    transform: translateY(-50%); 
 
    border-top: 15px solid transparent; 
 
    border-bottom: 15px solid transparent; 
 
    border-left: 15px solid tomato; 
 
} 
 

 
.projectStatusWrapper li:nth-child(6n+3):after, 
 
.projectStatusWrapper li:nth-child(6n+6):after { 
 
    left: 50%; 
 
    bottom: -23px; 
 
    transform: translateY(-50%); 
 
    border-right: 15px solid transparent; 
 
    border-top: 15px solid tomato; 
 
    border-left: 15px solid transparent; 
 
} 
 

 
.projectStatusWrapper li:nth-child(6n+4):after, 
 
.projectStatusWrapper li:nth-child(6n+5):after { 
 
    top: 50%; 
 
    left: -19px; 
 
    transform: translateY(-50%); 
 
    border-top: 15px solid transparent; 
 
    border-bottom: 15px solid transparent; 
 
    border-right: 15px solid tomato; 
 
} 
 

 
.projectStatusWrapper li:last-child:after { 
 
    display: none; 
 
}
<div class="projectStatusWrapper"> 
 
    <ul> 
 
    <li class="complete">Step 1</li> 
 
    <li class="complete">Step 2</li> 
 
    <li>Step 3</li> 
 
    <li>Step 4</li> 
 
    <li>Step 5</li> 
 
    <li>Step 6</li> 
 
    <li>Step 7</li> 
 
    <li>Step 8</li> 
 
    <li>Step 9</li> 
 
    <li>Step 10</li> 
 
    </ul> 
 
</div>

+0

Dank - sieht aus wie dieser Ansatz funktionieren könnte ... aber ... das LI folgen nicht das neue Format der Pfeile ... Ich habe Ihre HTML gerade bearbeitet

  • Schritt 1 verwenden
  • etc es deutlicher, was mache ich bedeuten - können wir die LI floats/Richtungen auf jeder Zeile ändern, so dass sie auflösen, um Sinn zu ergeben? – dubbs

    +1

    Danke - saubere Annäherung - funktioniert fast abgesehen von LIs Sequenz ist falsch> siehe http://codepen.io/8odoros/pen/QEzmvZ?editors=1100 - können wir float verwenden: Recht nach geraden Zeilen sortieren? – dubbs

    +0

    Das wurde behoben, genauso wie der letzte Pfeilfehler. Überprüft das mit vielen verschiedenen Mengen an Gegenständen und scheint zu funktionieren. Jetzt muss ich sie richtig ausrichten ... Ich habe den Code mit den letzten Änderungen aktualisiert. –