Regola la posizione dell'immagine in stile elenco?


169

C'è un modo per regolare la posizione dell'immagine in stile elenco?

Quando utilizzo il riempimento per gli elementi dell'elenco, l'immagine rimarrà nella sua posizione e non si sposterà con il riempimento ...


1
È davvero un peccato che non sia ancora incluso nelle specifiche CSS. Che punto è un list-style-imagese non può essere posizionato? Di conseguenza, la maggior parte delle persone utilizza soluzioni alternative come ::beforee background-imageinvece.
Mentalista,

Risposte:


205

Non proprio. Il tuo riempimento è (probabilmente) applicato all'elemento dell'elenco, quindi influirà solo sul contenuto effettivo all'interno dell'elemento dell'elenco.

L'uso di una combinazione di stili di sfondo e di riempimento può creare qualcosa di simile ad es

li {
  background: url(images/bullet.gif) no-repeat left top; /* <-- change `left` & `top` too for extra control */
  padding: 3px 0px 3px 10px;
  /* reset styles (optional): */
  list-style: none;
  margin: 0;
}

Potresti voler aggiungere uno stile al contenitore dell'elenco padre (ul) per posizionare gli elementi dell'elenco puntato, questo articolo A Elenco a parte ha un buon riferimento iniziale.


1
Questo metterà lo stile della lista un po 'più a destra rispetto alle normali voci della lista, che è un po' "off" se ce ne sono di seguito normali. Non conosco la soluzione indipendente, ma a seconda della larghezza della tua immagine, questo migliorerà questo: "margine: 0 0 0 -7px;"
e-motiv,

Per il posizionamento superiore, la modifica del topvalore ha funzionato per me anziché per l'imbottitura superiore. background: url(images/bullet.gif) no-repeat left 8px;
Sridhar Katakam,

È un vero peccato non poter dare uno stile alla lista direttamente. Fa sì che le persone utilizzino ogni sorta di soluzioni alternative. Preferirei davvero usare lo stile elenco per qualcosa che è davvero uno stile elenco, ma non riesco a farlo apparire come voglio.
mcv

75

Di solito nascondo il tipo di elenco e utilizzo un'immagine di sfondo, che è mobile

li 
{
    background: url(/Images/arrow_icon.gif) no-repeat 7px 7px transparent;
    list-style-type: none;
    margin: 0;
    padding: 0px 0px 1px 24px;
    vertical-align: middle;
}

"7px 7px" è ciò che allinea l'immagine di sfondo all'interno dell'elemento ed è anche relativa all'imbottitura.


21

Una possibile soluzione a questa domanda che non è stata ancora menzionata è la seguente:

    li {
        position: relative;
        list-style-type: none;
    }

    li:before {
        content: "";
        position: absolute;
        top: 8px;
        left: -16px;
        width: 8px;
        height: 8px;
        background-image: url('your-bullet.png');
    }

Ora puoi usare la parte superiore / sinistra di li: before per posizionare il nuovo proiettile. Si noti che la larghezza e l'altezza di li: prima devono avere le stesse dimensioni dell'immagine di sfondo scelta. Funziona con Internet Explorer 8 e versioni successive.


Questa è la migliore soluzione secondo me. Se si sposta lo pseudo-elemento :: before a sinistra, si ottiene lo stesso effetto.
TaylorMac,

12

Ho avuto lo stesso problema, ma non ho potuto usare l'opzione di sfondo (e non volevo usare più sfondi) quindi ho pensato a un'altra soluzione

questo è un esempio per un menu che ha un indicatore quadrato come per la voce di menu attiva / corrente (lo stile di elenco predefinito è impostato su nessuno in un'altra regola)

nav ul li.active>a:before{
    content: "■";
    position: absolute;
    top: -22px;
    left: 55px;
    font-size: 33px;

}

crea un quadrato usando un carattere quadrato con la pseudo classe ": before" ed è liberamente posizionabile usando il posizionamento assoluto.


8

Ecco cosa ho fatto per ottenere piccoli blocchi grigi sul lato sinistro e al centro del testo con una maggiore altezza delle linee:

line-height:200%;
padding-left:13px;
background-image:url('images/greyblock.gif');
background-repeat:no-repeat;
background-position:left center;

Spero che questo aiuti qualcuno: D


6

La soluzione per cui ho optato per alla fine è stata quella di modificare l'immagine stessa per aggiungere spazio.

L'uso di un'immagine di sfondo su Li, come alcuni suggeriscono, funziona in molti casi, ma fallisce quando l'elenco viene usato insieme a un'immagine fluttuante (ad esempio per far avvolgere il testo attorno all'immagine).

Spero che questo ti aiuti.


6

Un'altra opzione che puoi fare è la seguente:

li:before{
    content:'';
    padding: 0 0 0 25px;
    background:url(../includes/images/layouts/featured-list-arrow.png) no-repeat 0 3px;
}

Utilizzare (0 3px) per posizionare l'immagine dell'elenco.

Funziona in IE8 +, Chrome, Firefox e Opera.

Uso questa opzione perché puoi cambiare facilmente lo stile dell'elenco e avere buone probabilità che tu non debba nemmeno usare un'immagine. (violino sotto)

http://jsfiddle.net/flashminddesign/cYAzV/1/

AGGIORNARE:

Questo spiegherà il testo / contenuto che va nella seconda riga:

ul{ 
    list-style-type:none;
}

li{
    position:relative;
}

ul li:before{
    content:'>';
    padding:0 10px 0 0;
    position:absolute;
    top:0; left:-10px;
}

Aggiungi padding-left: a li se vuoi più spazio tra il punto elenco e il contenuto.

http://jsfiddle.net/McLeodWebDev/wfzwm0zy/


1
la versione aggiornata affronterà la riga aggiuntiva JSfiddle
McLeodWebDev il


3

Penso che ciò che vuoi davvero fare sia aggiungere il padding (che stai aggiungendo al <li>) al tag <ul> e quindi i punti elenco si sposteranno con il testo del <li>.

C'è anche la posizione in stile elenco che potresti esaminare. Influisce sul modo in cui le linee avvolgono le immagini dei proiettili.


3

come la risposta "un darren" ma modifiche minori

li 
{
background: url("images/bullet.gif") left center no-repeat;
padding-left: 14px;
margin-left: 24px;
}

funziona su più browser, basta regolare il riempimento e il margine

Modifica per nidificato: aggiungi questo stile per aggiungere margine sinistro all'elenco sotto-nidificato

ul ul {margine sinistro: 15px; }


3

Sto usando qualcosa del genere, sembra abbastanza pulito e semplice per me:

ul { 
     list-style:  none;
     /* remove left padding, it's usually unwanted: */
     padding:  0;
}

li:before {
     content:  url(icon.png);
     display:  inline-block;
     vertical-align:  middle;

     /* If you want some space between icon and text: */
     margin-right:   1em;
}

Il codice sopra funziona come nella maggior parte dei miei casi.
Per una regolazione esatta è possibile modificare vertical-align, ad esempio:

vertical-align:  top;

/* or */
vertical-align:  -10px;

/* or whatever you need instead of "middle" */

È possibile impostare list-style: nonesul liposto di ul, se si preferisce.


0

Trovo che la risposta accettata sia un po 'confusa, troppo deve spingere con ulteriori comandi padding e css.

Non aggiungo mai il riempimento per elencare gli elementi personalmente, controllando normalmente la loro altezza della linea e il margine occasionale è sufficiente.

Quando ho un problema di allineamento con le immagini in stile elenco personalizzato, aggiungo solo uno o due pixel di spazio extra attorno a qualsiasi lato sia necessario per regolare la sua posizione rispetto a ciascuna riga dell'elenco.


Non hai mai avuto a che fare con il rendering cross-browser, vero?
Volker E.

0

soluzione con fontawesome

#polyNedir ul li { position:relative;padding-left:20px }
#polyNedir ul li:after{font-family:fontawesome;content:'\f111';position:absolute;left:0px;top:3px;color:#fff;font-size:10px;}

0

Nascondi l'immagine proiettile predefinita e utilizzala in background-imagequanto hai un controllo molto maggiore come:

li {
    background-image: url(https://material.io/tools/icons/static/icons/baseline-add-24px.svg);
    background-repeat: no-repeat;
    background-position: left 50%;
    padding-left: 2em;
}

ul {
    list-style: none;
}
<ul>
<li>foo</li>
<li>bar</li>
</ul>


0

My solution:

ul {
    line-height: 1.3 !important;
    li {
        font-size: x-large;
        position: relative;
        &:before {
            content: '';
            display: block;
            position: absolute;
            top: 5px;
            left: -25px;
            height: 23px;
            width: 23px;
            background-image: url(../img/list-char.png) !important;
            background-size: 23px;
            background-repeat: no-repeat;
        }
    }
}

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.