Disons que j'ai ce HTML :
<h3>Features</h3>
<ul>
<li><img src="alphaball.png">Smells Good</li>
<li><img src="alphaball.png">Tastes Great</li>
<li><img src="alphaball.png">Delicious</li>
<li><img src="alphaball.png">Wholesome</li>
<li><img src="alphaball.png">Eats Children</li>
<li><img src="alphaball.png">Yo' Mama</li>
</ul>
et ce CSS :
li { text-align:center; display:inline-block; padding:0.1em 1em }
img { width:64px; display:block; margin:0 auto }
Le résultat peut être vu ici : http://jsfiddle.net/YMN7U/1/
Imaginons maintenant que je veuille le diviser en trois colonnes, l'équivalent d'injecter un <br>
après le troisième <li>
. (En fait, faire cela serait sémantiquement et syntaxiquement invalide).
Je sais comment sélectionner le troisième <li>
en CSS, mais comment faire pour imposer un saut de ligne après celui-ci ? Cela ne fonctionne pas :
li:nth-child(4):after { content:"xxx"; display:block }
Je sais aussi que ce cas particulier est possible en utilisant float
au lieu de inline-block
mais je ne suis pas intéressé par les solutions utilisant float
. Je sais également qu'avec les blocs à largeur fixe, cela est possible en définissant la largeur du parent. ul
à environ 3x cette largeur ; cette solution ne m'intéresse pas. Je sais également que je pourrais utiliser display:table-cell
si je voulais de vraies colonnes ; cette solution ne m'intéresse pas. Je suis intéressé par la possibilité de forcer une rupture à l'intérieur du contenu en ligne.
Editar : Pour être clair, je m'intéresse à la "théorie", pas à la solution d'un problème particulier. Une CSS peut-elle injecter un saut de ligne au milieu de display:inline(-block)?
éléments, ou est-ce impossible ? Si vous êtes certain que c'est impossible, c'est une réponse acceptable.
2 votes
Mettre les trois premiers et les trois seconds dans deux listes différentes ? Je suppose que vous ne voulez pas faire ça, mais j'ai pensé que je devais le faire.
0 votes
Il semble que vous deviez nous dire ce que vous essayez réellement d'obtenir afin que quelqu'un puisse vous recommander la meilleure méthode. Toutes les options que vous avez exclues existent pour résoudre le problème que vous avez, pourquoi une autre solution est-elle nécessaire ?
5 votes
@Jake Je faisais en fait exactement ce que j'ai dit : j'utilisais une liste sémantique d'éléments et je voulais que les éléments soient placés après certains d'entre eux. En pratique, j'ai défini la largeur du conteneur, mais cela ne fonctionne que dans mon cas particulier, car les éléments étaient de la même largeur et je voulais qu'ils s'enroulent sur un bord cohérent. Ce n'est peut-être pas toujours le cas. Ce que je fais "essayant vraiment d'atteindre" est d'apprendre si CSS peut ou non forcer un saut de ligne au milieu d'un flux en ligne. La réponse assurée "Ce n'est certainement pas possible" est acceptable (si elle est correcte).