Existe-t-il un sélecteur CSS permettant d’attacher du style à la partie numérique d’une liste ordonnée uniquement?
J'ai HTML comme:
<ol>
<li>a</li>
<li>b</li>
<li>c</li>
</ol>
Ce qui devrait produire:
1.a
2.b
3.c
J'ai besoin de faire 1., 2. et 3. gras, tout en laissant a, b, c régulier.
Je suis au courant du <span>
solution de contournement...
[~ # ~] css [~ # ~]
ol {
margin: 0 0 1.5em;
padding: 0;
counter-reset: item;
}
ol > li {
margin: 0;
padding: 0 0 0 2em;
text-indent: -2em;
list-style-type: none;
counter-increment: item;
}
ol > li:before {
display: inline-block;
width: 1em;
padding-right: 0.5em;
font-weight: bold;
text-align: right;
content: counter(item) ".";
}
Environ un an plus tard, mais comme cela pourrait être intéressant aussi pour ceux qui viendront dans le futur:
Une autre possibilité simple consisterait à envelopper le contenu de l'élément de la liste dans un <p>
, À définir le <li>
En gras et le <p>
À la normale. Cela serait également préférable du point de vue de l’IA, en particulier lorsque <li>
Peut contenir des sous-listes (pour éviter de mélanger des nœuds de texte avec des éléments de niveau bloc).
Exemple complet pour votre commodité:
<html>
<head>
<title>Ordered list items with bold numbers</title>
<style>
ol li {
font-weight:bold;
}
li > p {
font-weight:normal;
}
</style>
</head>
<body>
<ol>
<li>
<p>List Item 1</p>
</li>
<li>
<p>Liste Item 2</p>
<ol>
<li>
<p>Sub List Item 1</p>
</li>
<li>
<p>Sub List Item 2</p>
</li>
</ol>
</li>
<li>
<p>List Item 3.</p>
</li>
</ol>
</body>
</html>
Si vous préférez une approche plus générique (qui couvrirait également d'autres scénarios tels que <li>
Avec des descendants autres que <p>
, Vous pouvez utiliser li > *
Au lieu de li > p
:
<html>
<head>
<title>Ordered list items with bold numbers</title>
<style>
ol li {
font-weight:bold;
}
li > * {
font-weight:normal;
}
</style>
</head>
<body>
<ol>
<li>
<p>List Item 1</p>
</li>
<li>
<p>Liste Item 2</p>
<ol>
<li>
<p>Sub List Item 1</p>
</li>
<li>
<p>Sub List Item 2</p>
</li>
</ol>
</li>
<li>
<p>List Item 3.</p>
</li>
<li>
<code>List Item 4.</code>
</li>
</ol>
</body>
</html>
(Vérifiez l’élément de liste 4 ici qui est ol/li/code et pas ol/li/p/code ici. Assurez-vous d’utiliser le sélecteur li > *
Et non li *
, Si vous ne le faites que Vous souhaitez que les descendants de niveau bloc soient normalisés, mais pas également comme "foo <strong>
bold Word </strong>
foo".
ol {
counter-reset: item;
}
ol li { display: block }
ol li:before {
content: counter(item) ". ";
counter-increment: item;
font-weight: bold;
}
j'ai eu un problème similaire en écrivant un bulletin d'information. j'ai donc dû aligner le style de cette façon:
<ol>
<li style="font-weight:bold"><span style="font-weight:normal">something</span></li>
<li style="font-weight:bold"><span style="font-weight:normal">something</span></li>
<li style="font-weight:bold"><span style="font-weight:normal">something</span></li>
</ol>
Si vous utilisez Bootstrap 4:
<ol class="font-weight-bold">
<li><span class="font-weight-light">Curabitur aliquet quam id dui posuere blandit.</span></li>
<li><span class="font-weight-light">Curabitur aliquet quam id dui posuere blandit.</span></li>
</ol>
Ceci est une mise à jour de la réponse de dcodesmith https://stackoverflow.com/a/21369918/16682
La solution proposée fonctionne également lorsque le texte est plus long (les lignes doivent être bouclées): Violon mis à jour
Lorsque vous utilisez un système de grille, vous devrez peut-être effectuer l’une des opérations suivantes (du moins cela s’applique à Foundation 6: impossible de le reproduire dans le violon):
box-sizing:content-box;
à la liste ou à son conteneurtext-indent:-2em;
à -1.5em
P.S .: Je voulais ajouter ceci comme une édition à la réponse originale, mais elle a été rejetée.
La réponse précédente a un effet secondaire qui transforme tous les types de listes en numériques. <ol type="a">
montrera 1. 2. 3. 4. plutôt que a. b. c. ré.
ol {
margin: 0 0 1.5em;
padding: 0;
counter-reset: item;
}
ol > li {
margin: 0;
padding: 0 0 0 2em;
text-indent: -2em;
list-style-type: none;
counter-increment: item;
}
ol > li:before {
display: inline-block;
width: 1em;
padding-right: 0.5em;
font-weight: bold;
text-align: right;
content: counter(item) ".";
}
/* Add support for non-numeric lists */
ol[type="a"] > li:before {
content: counter(item, lower-alpha) ".";
}
ol[type="i"] > li:before {
content: counter(item, lower-roman) ".";
}
Le code ci-dessus ajoute la prise en charge des lettres minuscules et des chiffres romains minuscules. Au moment de la rédaction du présent document, les navigateurs ne font pas la distinction entre les sélecteurs majuscules et minuscules pour le type. Vous ne pouvez donc choisir que des majuscules ou des minuscules pour vos types alternatifs, je suppose.
Je sais que c'est vieux, mais il y a aussi un moyen "rapide et sale" de ne pas utiliser <li>
du tout:
<!-- <ul> is used for indentation only -->
<ul>
<p> <b>1.</b> item text </p>
<p> <b>2.</b> item text </p>
</ul>
Vous pouvez également mettre autour de a, b, c puis en gras le ul dans le css.
EXEMPLE
ul {
font-weight:bold;
}
<ul><li><span style="font-weight:normal">a</span></li></ul>
Réponse assez tardive, mais j'espère que quelqu'un trouvera cela utile
J'ai eu une situation comme celle-ci:
élément de la liste
une. Élément de liste
Où le premier élément était <strong>
, le sous-élément était le poids normal et le "1". juste ne serait pas gras.
Ma solution était via jQuery:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
if ($('ol').has('li').has('strong')) {
$('ol ').css('font-weight', 'bold');
$('ol > li > ol').css('font-weight', 'normal');
}
});
</script>
Espérons que cela aide quelqu'un!
Un nouveau ::marker
Le sélecteur de pseudo-éléments a été ajouté à pseudo-éléments CSS de niveau 4 , ce qui permet de styliser les numéros d’élément de liste en gras aussi simplement que
ol > li::marker {
font-weight: bold;
}
Malheureusement, il n’ya actuellement que supporté par Firefox 68 et plus . (Voir Bogue Chrome 457718 pour le statut Chrome/Blink.)