Für meine <ul>
-Liste möchte ich nach jedem Element einer Liste einen <hr>
hinzufügen. Das Ergebnis sollte wie folgt aussehen:
<ul class="mylist">
<li>
moooo!
<hr width="40%">
</li>
<li>
maaaaa!
<hr width="40%">
</li>
...
</ul>
Es ist ein schlechter Stil, der <hr>
zu jedem <li>
hinzugefügt wird. Ich kann nicht benutzen:
.mylist > li: after{
content: "<hr>"
}
als Inhalt würde die Charaktere entkommen.
Ich mache auch nicht möchte jQuery verwenden:
$('.mylist').find('li').append('<hr width="40%">');
Die Frage ist also, wie ich <hr width="40%">
an each<li>
einer bestimmten Liste anhängen könnte, indem Sie css3 verwenden.
jQuery-Lösung
Ich habe gerade erkannt, dass Sie das hr
-Element in li
schachteln möchten, bevor Sie es schließen. Ja, es ist vollkommen gültig. Verwenden Sie einfach append()
. Beachten Sie, dass Sie können dies nicht verwenden Nur CSS, da Sie DOM nicht mit CSS ändern können, müssen Sie jQuery oder JS verwenden
jQuery("ul li").append("<hr />");
CSS-Lösung
Wenn Sie kein zusätzliches Element benötigen oder keine jQuery-Lösung wünschen (wie Sie möchten)
Wenn Sie hr
-Element als direktes untergeordnetes Element für ul
-Element verwenden, ist dies kein gültiges Markup. Stattdessen können Sie einen border-bottom
für jeden li
verwenden, der sich wie hr
do verhält. Wenn Sie jedoch einen expliziten Weg wollen, zum Beispiel zur Steuerung der width
des Trennzeichens, ohne die width
von li
zu ändern, können Sie dies auf diese Weise tun
ul li:after {
content: "";
display: block;
height: 1px;
width: 40%;
margin: 10px;
background: #f00;
}
Hier erstelle ich ein virtuelles block
-Ebenenelement, das im DOM zwar nicht vorhanden ist, aber nur das tut, was Sie brauchen. Sie können das Element genauso gestalten, wie Sie es mit einem normalen div
gestalten. Sie können auch border
verwenden, aber um die dünne Linie horizontal zentriert zu halten, habe ich height: 1px;
zugewiesen und dann margin
für den Abstand verwendet.
Ich denke, es ist besser, CSS dafür zu verwenden. Sie können beispielsweise das <hr>
-Tag nicht mehr verwenden, sondern Folgendes tun:
<ul class="mylist">
<li>
moooo!
</li>
<li>
maaaaa!
</li>
...
</ul>
und dann mit CSS:
.mylist li { border-bottom: 1px solid black; }
Es gibt auch andere Optionen. Wenn Sie beispielsweise die horizontale Linie nur für einige Listenelemente anzeigen möchten, können Sie ihnen eine Klasse zuweisen und eine CSS-Regel nur für diese Klasse hinzufügen. so was:
<ul class="mylist">
<li class="hr">
moooo!
</li>
<li>
maaaaa!
</li>
...
</ul>
und CSS:
.mylist li.hr { border-bottom: 1px solid black; }
Sie können wie folgt verwenden:
<ul>
<li></li>
</ul>
<hr/>
Das ist einfach. Wenn Sie ul
und li
verschachtelt haben, verwenden Sie li
anstelle von <hr/>
oder einfach <hr/>
innerhalb eines <li></li>
-Tags. Siehe unten. Es ist rein Ihre Wahl.
<ul>
<li>
<ul><li></li></ul>
</li>
<li style="height:1px;border:solid 1px #666"> </li> // or you can also use
<li><hr/></li>
<li>
<ul>
<li></li>
</ul>
</li>
</ul>
Fügen Sie eine Class
ein, die einen bottom-border:
für jeden <li>
erstellt.
<!--########## STYLE EACH li USING CLASS ##########-->
<style>
.hr {
width:40%;
border-bottom:1px solid rgba(0,0,0,.7);
}
</style>
<!--########### PAGE CONTENT ############-->
<ul class="mylist">
<li class="hr">
-CONTENT-
</li>
<li class="hr">
-CONTENT-
</li>
...
Tags im Inhalt sind nicht erlaubt und auch wenn es sehr irreführend wäre ( css {content: "text"}, Wie füge ich Tags hinzu? )
Wenn Sie denken, dass es falsch ist, <hr>
in HTML hinzuzufügen, ist es falsch, css (wenn möglich) oder js hinzuzufügen. IMHO a first Sie sollten versuchen, den Rand von <li
> zu verwenden, wenn das Ergebnis nicht wie erwartet ist, fügen Sie den <hr>
hinzu.