CSS: espace de contrôle entre la balle et

j'aimerais contrôler combien d'espace horizontal une balle pousse son <li> vers la droite dans un <ol> ou <ul> .

C'est-à-dire, au lieu d'avoir toujours

*  Some list text goes
   here.

j'aimerais pouvoir changer cela pour être

*         Some list text goes
          here.

ou

*Some list text goes
 here.

j'ai regardé autour de moi, mais je n'ai pu trouver que des instructions pour déplacer le bloc entier à gauche ou à droite, par exemple, http://www.alistapart.com/articles/taminglists /

136
demandé sur erjiang 2010-12-07 06:10:34

15 réponses

met son contenu dans un span qui est relativement positionné, alors vous pouvez 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>
123
répondu BalusC 2012-02-04 01:29:09

pour résumer les autres réponses ici – si vous voulez un contrôle plus fin sur l'espace entre les balles et le texte dans un article de liste <li> , vos options sont:

(1) Utiliser une image de fond:

<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 balle
  • vous pouvez utiliser CSS background-position pour positionner l'image à peu près n'importe où vous voulez par rapport au texte, en utilisant les pixels, ems ou %

inconvénients:

  • ajoute un fichier image supplémentaire (bien que petit) à votre page, augmentant le poids de la page
  • si un utilisateur augmente la taille du texte sur son navigateur, la puce restera à la taille d'origine. Il est également probable qu'il va devenir plus loin hors de la position que la taille du texte augmente
  • si vous développez un disposition "responsive" en utilisant seulement des pourcentages pour les largeurs, il pourrait être difficile d'obtenir la puce exactement où vous le voulez sur une gamme de largeurs d'écran

2. Utilisez du rembourrage sur le <li> étiquette

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

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

avantages:

  • pas d'image = 1 fichier à télécharger
  • en ajustant le rembourrage sur le <li> , vous pouvez ajouter autant extra l'espace horizontal entre la puce et le texte comme vous le souhaitez
  • si l'utilisateur augmente la taille du texte, l'espacement et la taille des puces devraient être proportionnels."

inconvénients:

  • ne Peut pas déplacer la balle plus près du texte que le navigateur par défaut
  • limité aux formes et aux tailles des types de balles encastrées CSS
  • Balle doit être de la même couleur que le texte
  • Aucun contrôle sur le positionnement vertical de la balle

(3) envelopper le texte dans un élément supplémentaire <span>

<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 fichier à télécharger
  • , Vous obtenez plus de contrôle sur la position de la balle qu'avec l'option (2) – vous pouvez rapprochez-le du texte (bien que malgré tous mes efforts il semble que vous ne pouvez pas modifier la position verticale en ajoutant padding-top au <span> . Quelqu'un d'autre peut avoir une solution pour ce...)
  • la puce peut être d'une couleur différente du texte
  • si l'utilisateur augmente la taille de son texte, la puce devrait être mise à l'échelle en proportion (à condition que vous positionniez le rembourrage et la marge dans ems pas px)

Inconvénients:

  • nécessite un élément supplémentaire peu élégant (cela vous fera probablement perdre plus d'amis sur SO qu'il ne le fera dans la vie réelle;) mais c'est ennuyeux pour ceux qui aiment que leur code soit aussi mince et efficace que possible, et il viole la séparation de la présentation et du contenu que HTML / CSS est censé offrir)
  • Aucun contrôle sur la taille et la forme de la balle

voici espérer pour quelques nouvelles fonctionnalités list-style dans CSS4, de sorte que nous pouvons créer des balles plus intelligentes sans recourir à des images ou un mark-up exta:)

103
répondu Joel 2012-02-01 16:34:14

ça devrait le faire. Assurez-vous de définir 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 l'utilisation de pseudo-éléments pour ce genre de chose, mais il ne fonctionne pour contrôler la distance.

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: '92';
  position: absolute;
  left: 0;
}
<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>
26
répondu Kevin 2018-04-24 21:20:25

question ancienne, mais l'élément pseudo :avant 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>

il 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>

santé!

12
répondu David Mann 2014-04-01 16:33:57

For list-style-type: inline :

c'est presque la même chose que la réponse de DSMann8 mais moins de code css.

Vous avez juste besoin de

<style>
    li:before {
        content: "";
        padding-left: 10px;
    }
</style>

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

Cheers

9
répondu larshaeuser 2014-10-13 08:51:27

vous pouvez utiliser l'attribut padding-left sur la liste items ( pas sur la liste elle-même!).

6
répondu ClosureCowboy 2010-12-07 03:21:55

utilisant le texte-tiret sur li fonctionne le mieux.

text-indent: -x px; de déplacer la balle plus près de li et vice-versa.

en utilisant relatif sur portée la gauche négative pourrait ne pas fonctionner correctement avec les versions plus anciennes pour IE. P. S-évitez de donner des positions autant que vous le pouvez.

6
répondu Ayush Maheshwari 2015-07-29 06:41:28

Une liste non ordonnée commence par la balise ul. Chaque élément de la liste commence par Les éléments de la liste seront marqués par des puces (petits cercles noirs) par défaut:

    <!DOCTYPE html>
    <html>
       <body>
          <h2>Normal List </h2>
          <ul>
             <li>Coffee</li>
             <li>Tea</li>
             <li>Milk</li>
          </ul>
       </body>
    </html>

sortie:

<!DOCTYPE html>
<html>
<body>

<h2>Normal List </h2>

<ul>
  <li>Coffee</li>
  <li>Tea</li>
  <li>Milk</li>
</ul>

</body>
</html>

la propriété text-indent spécifie l'indentation de la première ligne dans un bloc de texte.

Remarque: les valeurs Négatives sont autorisées. La première ligne sera en retrait à gauche si la valeur est négative.

<ul style='text-indent: -7px;'>
  <li>Coffee</li>
  <li>Tea</li>
  <li>Milk</li>
</ul>
6
répondu Harish Verma 2016-07-27 10:30:08

Voici une autre solution en utilisant CSS counter et pseudo elements. Je le trouve plus élégant car il ne nécessite pas l'utilisation de markup html supplémentaire ni classes css:

ol,
ul {
    list-style-position: inside;
}

li {
    list-style-type: none;
}

ol {
    counter-reset: ol; //reset the counter for every new ol
}

ul li:before {
        content: '22 "151900920"a0 "151900920"a0 "151900920"a0'; //bullet unicode followed by 3 non breakable spaces
}

ol li:before {
        counter-increment: ol;
        content: counter(ol) '."151900920"a0 "151900920"a0 "151900920"a0'; //css counter followed by a dot and 3 non breakable spaces
}

j'utilise des espaces non cassables de sorte que l'espacement n'affecte que la première ligne des éléments de ma liste (si l'élément de liste est long de plus d'une ligne). Vous pourriez utiliser du rembourrage ici à la place.

6
répondu Lucas Demea 2016-12-24 15:52:33

vous pouvez également utiliser un remplacement d'image de fond comme une alternative, vous donnant le contrôle total sur le positionnement vertical et horizontal.

voir la réponse à cette Question

4
répondu Tom Auger 2017-05-23 12:10:33
ul
{
list-style-position:inside;
} 

définition et Usage

la propriété list-style-position spécifie si les marqueurs list-item doivent apparaître à l'intérieur ou à l'extérieur du flux de contenu.

Source: http://www.w3schools.com/cssref/pr_list-style-position.asp

4
répondu rex 2013-10-15 19:20:35

il semble que vous pouvez (quelque peu) contrôler l'espacement en utilisant le rembourrage sur la balise

  • .

    <style type="text/css">
        li { padding-left: 10px; }
    </style>
    

    le hic, c'est qu'il ne semble pas vous permettre de le broyer de façon-snug comme votre dernier exemple.

    Pour que vous pouvez essayer de désactiver list-style-type et l'utilisation •

    <ul style="list-style-type: none;">
        <li>&bull;Some list text goes here.</li>
    </ul>
    
  • 2
    répondu Matthew Mucklo 2010-12-07 03:27:27

    question ancienne mais toujours pertinente. Je recommande l'utilisation de négatif text-indent . list-style-position doit être outside .

    Pour:

    • Puce est correctement placé automatiquement
    • Changer la taille de police à ne pas rompre la balle en position
    • Pas d'éléments supplémentaires ( non ::pseudo-éléments trop )
    • fonctionne pour les deux RTL and LTR without change in CSS.

    Inconvénients:

    • essayer
    • à
    • trouver
    • :)
    2
    répondu Ilya Novojilov 2018-04-05 17:09:04

    vous pouvez utiliser ul li:before et une image de fond, et attribuer position: relative et position:absolute au li et li:before , respectivement. De cette façon, vous pouvez créer une image et la positionner où vous voulez par rapport au li.

    0
    répondu Astockwell 2012-04-26 17:29:25

    utiliser <span style="display: flex;"> à l'intérieur de chaque <li> .

    -1
    répondu Masoud Shariati 2017-10-17 04:31:09