Comment garder l'indentation de deuxième ligne dans l'ordre des listes via CSS?
Je veux avoir un "à l'intérieur" de de liste de liste avec des puces ou des nombres décimaux être flush avec supérieure des blocs de texte. Deuxième lignes d'entrées de la liste à avoir la même tiret comme la première ligne!
E. g.:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aenean commodo ligula eget dolor. Aenean Aenean massa.
Cum sociis natoque penatibus et magnis dis parturient montes,
nascetur ridiculus mus. Donec quam felis,
1. Text
2. Text
3. longer Text, longer Text, longer Text, longer Text, longer Text, longer Text
second line of longer Text
4. Text
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aenean commodo ligula eget dolor.
CSS prend seulement deux valeurs pour ses "list-style-position" - à l'intérieur et à l'extérieur. Avec "l'intérieur" de la seconde ligne sont au même niveau que la liste des points à la ligne supérieure:
3. longer Text, longer Text, longer Text, longer Text, longer Text, longer Text
second line of longer Text
4. Text
Largeur "de l'extérieur" ma liste n'est pas correctement aligné avec le supérieur de blocs de texte plus.
Expériences largeur text-indent, padding-left et margin-left de travail pour les listes non ordonnées, mais ils ne parviennent pas pour les listes ordonnées, car il dépend de la liste des décimales du nombre de caractères:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aenean commodo ligula eget dolor.
3. longer Text, longer Text, longer Text, longer Text, longer Text, longer Text
second line of longer Text
4. Text
11. Text
12. Text
"11" et "12." ne sont pas rincer avec le supérieur d'un bloc de texte par rapport à "3" et "4.".
Où est donc le secret sur les listes ordonnées et le deuxième-ligne-tiret? Merci pour votre effort!
- Utilisateur Pali Madra ajouté cela comme une réponse, mais il a été supprimé pour ne contenant pas plus de exlpanation. Il a dit que le jsfiddle peut-être ce que vous êtes à la recherche de: jsfiddle.net/palimadra/CZuXY/1
- Essayez de définir padding-left seulement ...
- Dans le cas où quelqu'un tombe sur cette question, qui est simplement à la recherche pour "liste de base d'insertion", jetez un oeil à cette question (stackoverflow.com/questions/17556496/...) et Natasha Banegas réponse.
- Pas une seule réponse, adresses, la question réelle. La vraie question est comment faire pour aligner à gauche les chiffres dans la liste, alors que séparément à gauche aligner le texte de l'élément de la liste avec le texte de l'objet au-dessus d'elle lorsque que le texte déborde à une deuxième ligne. Par défaut -- et dans presque chaque réponse, la liste est chiffres sont alignés à droite et le texte de la liste des éléments sont alignés à gauche.
Vous devez vous connecter pour publier un commentaire.
Mise à jour
Cette réponse est obsolète. Vous pouvez le faire beaucoup plus simplement, comme l'a souligné
Je suis surpris de voir ce qui n'a pas encore été résolu. Vous pouvez utiliser le navigateur de la table de l'algorithme de mise en page (sans l'aide de tableaux) comme ceci:
Voir https://www.w3schools.com/cssref/pr_list-style-position.asp
Réponse Originale À Cette Question
Démo: http://jsfiddle.net/4rnNK/1/
Pour le faire fonctionner dans IE8, l'utilisation de l'héritage
:before
notation avec un deux-points.counter-reset
,counter-increment
etcounter()
propriétés.position: relative
sur le<li>
etposition: absolute
sur le contenu généré. Voir jsfiddle.net/maryisdead/kgr4k pour un exemple.40px
? Qui va briser lorsque les compteurs sont plus large que celui. Le point de l'ensemble de l'aide du tableau de mise en page, c'est que le navigateur va automatiquement ajuster le contenu.display: table-cell
.ol { text-indent: -1em; padding-left: 1em; }
ol { padding-left: 1em }
.ol { text-indent: -1em; padding-left: 1em; }
solution — essayer de vérifier que dans les différents navigateurs (par exemple, Safari vs Chrome) et les polices. Il est juste dit en gros qu'ol { text-indent: -Npx; padding-left: Npx; }
et est très fragile.Je crois que cela va faire ce que vous cherchez.
JSFiddle: https://jsfiddle.net/dzbos70f/
padding-left:1em
a fait pour moi. solution la plus simple est souvent le meilleur.padding-left: 1em;
🙂1em
n'est pas égal à l'espace de retrait de la. Les lignes ne seront pas aligner parfaitement pixel-sage. Deuxièmement, qu'en est-il de la liste atteint le nombre de 10? 100? Le texte-tiret ne fonctionne pas, il ne sera pas aligné. Cette réponse devrait être en bas-voté.1em
. oi60.tinypic.com/a0eyvs.jpg Le premier élément de liste est l'aide de l'text-indent technique ci-dessus. Comparé à la façon dont il cherche avec list-style-position: extérieur, c'est mal aligné, par un pixel dans ce cas.list-style: disc inside;
?La méthode la plus simple et la plus propre, sans hacks, est juste en retrait de la
ul
(ouol
), comme suit:Cela donne le même résultat que l'on a accepté la réponse: https://jsfiddle.net/af2fqryz/
Capture d'écran:
list-style-position: outside
à<li>
.Vérifier ce violon:
http://jsfiddle.net/K6bLp/
Il montre comment manuellement tiret ul et ol à l'aide de CSS.
HTML
CSS
Aussi j'ai édité votre violon
http://jsfiddle.net/j7MEd/3/
Faire une note de celui-ci.
type
attribut pour<ol>
semble être obsolète en HTML 5. Utilisationstyle="list-style-type: "
à la place.Vous pouvez définir la marge et le remplissage d'un
ol
ouul
en CSSJe crois que vous avez besoin juste de mettre la liste des 'bullet' à l'extérieur de la marge.
Vous pouvez utiliser les CSS pour sélectionner une plage; dans ce cas, vous souhaitez que les éléments de la liste 1-9:
Puis ajuster les marges sur ces premiers éléments de façon appropriée:
Le voir en action ici: http://www.wortfm.org/wort-madison-charts-for-the-week-beginning-11192012/
ma solution est tout à fait le même que Pumbaa80's, mais je vous suggérons d'utiliser
display: table
au lieu dedisplay:table-row
pourli
élément.Donc, ce sera quelque chose comme ceci:
Alors maintenant, nous pouvons utiliser des marges pour l'espacement entre les
li
'sJe suis assez friand de cette solution par moi-même:
Le code CSS suivant fait le tour:
L'ol, ul listes de travailler si vous le souhaitez, vous pouvez également utiliser une table avec border: none en css.
CSS prend seulement deux valeurs pour ses "list-style-position" - à l'intérieur et à l'extérieur. Avec "l'intérieur" de la seconde ligne sont au même niveau que la liste des points à la ligne supérieure:
Dans des listes ordonnées, sans intervention, si vous donnez à "list-style-position de" la valeur "à l'intérieur", la deuxième ligne d'une longue liste d'élément aura pas de tiret, mais d'aller en arrière vers le bord gauche de la liste (c'est à dire qu'il alignera avec le numéro de l'élément). C'est propre à des listes ordonnées et ne se produit pas dans les listes non ordonnées.
Si vous au lieu de donner des "list-style-position de" la valeur "à l'extérieur", la deuxième ligne sera la même indentation de la première ligne.
J'avais une liste avec une bordure et eu ce problème. Avec "list-style-position" set "de l'intérieur", ma liste n'a pas l'air comme je le désirais. Mais avec "list-style-position" set "de l'extérieur", les numéros de la liste des articles sont tombés à l'extérieur de la boîte.
J'ai résolu ce problème en définissant simplement une plus grande marge de gauche pour l'ensemble de la liste, ce qui a poussé l'ensemble de la liste vers la droite, le dos dans la position où il était avant.
CSS:
ol.classname {margin:0;padding:0;}
ol.classname li {margin:0.5 em 0 0 0;padding-left:0;list-style-position:outside;}
HTML:
Ok, je reviens et compris certaines choses. Ceci est une ébauche de SOLUTION à ce que je propose, mais il semble être fonctionnelle.
Tout d'abord, j'ai fait les numéros d'une série de listes non ordonnées. Une liste non ordonnée aura normalement un disque au début de chaque élément de la liste (
Ensuite, j'ai fait toute la liste display: table-row. Ici, pourquoi n'ai-je pas simplement coller le code au lieu de bavarde à ce sujet?
CSS:
}
}
Cela semble aligner le texte dans la 2e div avec les numéros dans la liste ordonnée de la première div. J'ai entouré la fois dans la liste et le texte avec une étiquette de manière à ce que je peux juste dire à tous les divs pour afficher que les inline-block. Cette alignés bien.
La marge est là pour mettre un espace entre la période et le début du texte. Sinon, ils courent droit les uns contre les autres et il ressemble à une horreur.
Mon employeur a voulu enveloppé autour d'un texte (pour plus de bibliograhical entrées) à la ligne avec le début de la première ligne, pas la marge de gauche. À l'origine, j'étais remuer avec une marge positive et une négative retrait du texte, mais ensuite j'ai réalisé que lorsque je suis passé à deux divs, cela a eu pour effet de faire en sorte que le texte sur la même ligne, car la marge de gauche de la div a de la marge où le texte a naturellement commencé. Donc, j'avais besoin d'un 0.2 em marge pour ajouter de l'espace, et tout le reste aligné à merveille.
J'espère que cette aide si l'OP a été d'avoir un problème similaire...j'ai eu du mal à le comprendre, à lui/elle.
J'ai eu ce même problème et a commencé à utiliser user123444555621 réponse. Cependant, j'ai aussi besoin d'ajouter
padding
et unborder
à chaqueli
, qui cette solution ne permet pas, car chaqueli
est untable-row
.Tout d'abord, nous utilisons une
counter
à reproduire leol
's des nombres.Ensuite, nous l'avons
display: table;
sur chaqueli
etdisplay: table-cell
sur le:before
pour nous donner l'indentation.Enfin, la partie la plus délicate. Puisque nous ne sommes pas à l'aide d'un tableau de mise en page pour l'ensemble de la
ol
nous devons nous assurer que chaque:before
est de la même largeur. Nous pouvons utiliser lach
unité à garder à peu près la largeur égale au nombre de caractères. Afin de garder la largeur uniforme lorsque le nombre de chiffres pour le:before
's diffèrent, nous pouvons mettre en œuvre la quantité de requêtes. En supposant que vous savez vos listes ne sera pas 100 points ou plus, vous avez seulement besoin d'une quantité de la règle de requête à dire:before
pour modifier la largeur, mais vous pouvez facilement ajouter de plus.CSS:
HTML: