208 votes

CSS: espace de contrôle entre bullet et <li>

J'aimerais contrôler la façon dont beaucoup d'espace horizontal d'une balle pousse ses <li> vers la droite dans un <ol> ou <ul>.

C'est, au lieu de toujours l'avoir

*  Some list text goes
   here.

Je voudrais être en mesure de changer cela pour être

*         Some list text goes
          here.

ou

*Some list text goes
 here.

J'ai regardé autour de lui, mais seulement de trouver des instructions pour le transfert de la totalité du bloc de gauche ou de droite, par exemple, http://www.alistapart.com/articles/taminglists/

188voto

BalusC Points 498232

Placez son contenu dans un span qui est relativement positionné, vous pouvez alors contrôler l’espace par la propriété left du span .

 <!DOCTYPE html>
<html lang="en">
    <head>
        <title>SO question 4373046</title>
        <style>
            li span { position: relative; left: -10px; }
        </style>
    </head>
    <body>
        <ul>
            <li><span>item 1</span></li>
            <li><span>item 2</span></li>
            <li><span>item 3</span></li>
        </ul>
    </body>
</html>
 

129voto

Joel Points 431

Pour résumer les autres réponses ici – si vous voulez plus de contrôle sur l'espace entre les puces et le texte en <li> élément de la liste, vos options sont les suivantes:

(1) Utiliser une image d'arrière-plan:

<style type="text/css">
li {
    list-style-type:none;
    background-image:url(bullet.png);
}
</style>

<ul>
    <li>Some text</li>
</ul>

Avantages:

  • Vous pouvez utiliser n'importe quelle image que vous voulez pour la puce
  • Vous pouvez utiliser les CSS background-position à la position de l'image assez beaucoup n'importe où vous voulez en ce qui concerne le texte, à l'aide de pixels, ems ou %

Inconvénients:

  • Ajoute un supplément (bien que petit) fichier image à votre page, en augmentant le poids de la page
  • Si un utilisateur augmente la taille du texte sur leur navigateur, la balle va rester à la taille d'origine. Elle va aussi probablement obtenir le plus loin de la position de la taille du texte augmente
  • Si vous êtes l'élaboration d'un "réactif" mise en page en utilisant uniquement les pourcentages pour les largeurs, il pourrait être difficile d'obtenir la balle exactement où vous le souhaitez sur une plage de largeurs d'écran

2. L'utilisation de rembourrage sur l' <li> balise

<style type="text/css">
ul {padding-left:1em}
li {padding-left:1em}
</style>

<ul>
    <li>Some text</li>
</ul>

Avantages:

  • Pas d'image = 1 moins de fichiers à télécharger
  • En ajustant le rembourrage sur l' <li>, vous pouvez ajouter autant extra horizontale de l'espace entre la puce et le texte comme vous le souhaitez
  • Si l'utilisateur augmente la taille du texte, l'espacement et la taille de la balle doit échelle proportionnellement

Inconvénients:

  • Ne pouvez pas déplacer la balle plus près du texte que le navigateur par défaut
  • Limité de formes et de tailles de CSS intégré dans la puce types
  • Balle doit être de la même couleur que le texte
  • Pas de contrôle sur le positionnement vertical de la balle

(3) le texte à la ligne dans une extra - <span> élément

<style type="text/css">
li {
    padding-left:1em;
    color:#f00; /* red bullet */
}
li span {
    display:block;
    margin-left:-0.5em;
    color:#000; /* black text */
}
</style>

<ul>
    <li><span>Some text</span></li>
</ul>

Avantages:

  • Pas d'image = 1 moins de fichiers à télécharger
  • Vous obtenez plus de contrôle sur la position de la balle qu'avec l'option (2) – vous pouvez le déplacer plus près du texte (bien que malgré tous mes efforts, il semble que vous ne pouvez pas modifier la position verticale par l'ajout d' padding-top de la <span>. Quelqu'un d'autre peut avoir une solution de contournement pour ce faire, si...)
  • La balle peut être une couleur différente pour le texte
  • Si l'utilisateur augmente la taille du texte, la balle doit échelle de proportion (vous réglez le rembourrage et de la marge en ems ne px)

Inconvénients:

  • Nécessite une unsemantic élément (ce sera probablement vous faire perdre plus d'amis sur ce qu'elle sera dans la vraie vie ;) mais c'est ennuyeux pour ceux qui aiment leur code pour être aussi efficace que possible, et il viole la séparation de la présentation et du contenu en HTML / CSS est censé offrir)
  • Aucun contrôle sur la taille et la forme de la balle

Voici l'espoir d'une nouvelle liste de caractéristiques de style dans CSS4, nous pouvons créer plus intelligents balles sans avoir recours à des images ou des exta mark-up :)

45voto

Thorn007 Points 4054

Cela devrait le faire. Assurez-vous de placer vos balles à l'extérieur. vous pouvez également utiliser des pseudo-éléments css si vous pouvez les déposer dans IE7 vers le bas. Je ne recommande pas vraiment d'utiliser des pseudo-éléments pour ce genre de chose, mais cela fonctionne pour contrôler la distance.

 <!DOCTYPE HTML>
<html lang="en-US">
<head>
    <title>Test</title>
    <meta charset="UTF-8">
<style type="text/css">
ul {
    list-style: circle outside;
    width: 100px; }
li {
    padding-left: 40px; }

.pseudo, .pseudo ul  {
    list-style: none;
}
.pseudo li { position: relative; }

/* use ISO 10646 for content http://la.remifa.so/unicode/named-entities.html */
.pseudo li:before {
    content: '\2192';
    position: absolute;
    left: 0;
}
</style>
</head>
<body>
    <ul>
        <li>Any Browser really</li>
        <li>List item
            <ul>
                <li>List item</li>
                <li>List item</li>
            </ul>
        </li>
    </ul>

    <ul class="pseudo">
        <li>IE8+ only</li>
        <li>List item
            <ul>
                <li>List item with two lines of text for the example.</li>
                <li>List item</li>
            </ul>
        </li>
    </ul>
</body>
</html>
 

18voto

DSMann8 Points 41

Ancienne question, mais le pseudo-élément: before fonctionne bien ici.

 <style>
    li:before {
        content: "";
        display: inline-block;
        height: 1rem;  // or px or em or whatever
        width: .5rem;  // or whatever space you want
    }
</style>
 

Cela fonctionne vraiment bien et ne nécessite pas beaucoup de règles supplémentaires ou HTML.

 <ul>
    <li>Some content</li>
    <li>Some other content</li>
</ul>
 

À votre santé!

14voto

ClosureCowboy Points 5023

Vous pouvez utiliser l'attribut padding-left sur les éléments de la liste ( pas sur la liste elle-même!).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X