2017-06-29 2 views
-2

Ich entwerfe ein Rasterlayout für meine Anwendung, und ich weiß nicht, wie viele Spalten es haben wird. Ich würde gerne die Breite der Spalten dynamisch einstellen. Anstatt durch [3] zu dividieren, möchte ich durch [n] dividieren, wobei [n] die Anzahl der li Elemente ist, die von meiner foreach im clientseitigen Winkelcode ausgespuckt wurden.Gibt es eine Möglichkeit, die Breite eines Elements basierend darauf festzulegen, wie viele Geschwister es hat?

Ich kann keine externe Bibliothek für dieses Projekt verwenden.

li { 
        display:block; 
        float: left; 
        width: calc(~'(100% - 30px)/3'); 
        padding-left: 25px;      
        text-align: center; 
} 

Gibt es eine Möglichkeit, die <li> Elemente innerhalb eines <ul> dynamisch zu zählen?

+0

https://alistapart.com/article/quantity-queries-for- css – fcalderan

+0

Das funktioniert jetzt nicht für mich. Ich muss zählen die Elemente nicht definieren, was passiert, wenn es mehr als eine genaue Anzahl oder N. –

Antwort

0

Die gleiche Antwort wie @Rithwik aber JQuery frei

function update() { 
 
    return document.querySelectorAll("#counter li").length; 
 
} 
 

 
document.querySelector(".add").onclick = function() { 
 
    document.querySelector("#counter").innerHTML += "<li>Random</li>"; 
 
}; 
 
document.querySelector(".count").onclick = function() { 
 
    document.querySelector(".output").innerHTML = update(); 
 
};
<button class="add">Add item</button> 
 
<button class="count">Get count</button> 
 

 
<br><br> 
 
<div>Number of li tags : <span class="output"> - </span></div> 
 

 
<ul id="counter"> 
 
    <li>A</li> 
 
    <li>B</li> 
 
    <li>C</li> 
 
    <li>D</li> 
 
</ul>

+0

Noch besser! Vielen Dank! –

-3

Vielleicht ist das Flex-Layout für Sie gemacht?

Wenn Sie Angular 2 verwenden, werfen Sie einen Blick auf die flex layout.

Andernfalls könnte dies CSS tricks complete guide Ihnen helfen.

EDIT Wie gewünscht, ein Beispielcode:

.parent-container { 
    display: flex; 
    flex-direction: row; 
    flex-wrap: wrap; // wrap will fit in the parent. nowrap will extend the parent. 
    justify-content: space-around; 
    align-items: center; 
    align-content: center; 
} 

.children { 
    flex: 1 1 auto; // All the same width, always 
} 
+0

Es wäre besser, wenn Sie ein Beispiel-Snippet von was OP will, da Links jederzeit sterben können, so dass diese Antwort nutzlos machen – Swellar

+0

Das ist sehr kontextabhängig, aber ich werde einige zur Verfügung stellen. – trichetriche

+0

Danke! Aber ich kann in diesem Fall keine externe Bibliothek verwenden –

0

Ich weiß nicht, warum meine Antwort hat Downvoted worden, also werde ich es umbuchen, so dass Sie einen Code sehen.

Flex-Layout ist eine sehr leistungsfähige Möglichkeit, Ihre Spalten alle die gleiche Breite haben; und alle verhalten sich gleich. Im Grunde ist es wie ein spaltenbasiertes Raster (wie Bootstrap), aber mit nur ein paar Zeilen CSS. Hier

ist das Codebeispiel:

.parent-container { 
    display: flex; 
    flex-direction: row; 
    flex-wrap: wrap; // wrap will fit in the parent. nowrap will extend the parent. 
    justify-content: space-around; 
    align-items: center; 
    align-content: center; 
} 

.children { 
    flex: 1 1 auto; // All the same width, always 
} 
1

Um Ihre Frage zu beantworten, wie dynamisch die Anzahl der <li> in einem <ul> zählen. Sie können die Javascript .length Funktion verwenden, ein mit ein bisschen JQuery.

$("ul li").length; 
// OR Better 
$("#id_of_ul li").length; 

Dann können Sie Manipulationen tun, wie nach der Anzahl der <li> erforderlich, die von der Funktion zurückgegeben werden kann.

function update() { 
 
    return $("#counter li").length; 
 
} 
 

 

 
$(".add").on("click", function() { 
 
    $("#counter").append("<li>Random</li>"); 
 
}); 
 
$(".count").on("click", function() { 
 
    new_count = update(); 
 
    $(".output").html(new_count); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<button class="add">Add item</button> 
 
<button class="count">Get count</button> 
 

 
<br><br> 
 
<div>Number of li tags : <span class="output"> - </span></div> 
 

 
<ul id="counter"> 
 
    <li>A</li> 
 
    <li>B</li> 
 
    <li>C</li> 
 
    <li>D</li> 
 
</ul>

+1

Ich kann es sicherlich verwenden! Danke, dass Sie hilfreich sind! –

+0

JQuery obwohl: -/Eine ganze Bibliothek für diese –

+0

@AndrewBone Nun, natürlich alles, was JQuery tut, kann mit einfachem Javascript getan werden, weil JQuery nur Javascript ist. Dies ist nicht JQuery auf alle Fälle.Es hat sicherlich nicht geholfen, die Anforderung wurde Stunden später festgelegt. Keine Notwendigkeit, smiley Gesichter zu machen und so kritisch darüber zu sein. – Rithwik

Verwandte Themen