2013-10-29 9 views
7

Ho un elemento <a>, dopo di che voglio mostrare un segno >, utilizzando lo pseudo elemento .Utilizzo: dopo lo pseudo elemento dopo elemento di ancoraggio - differenze del browser

contenuto dell'elemento <a> è dinamico, quindi è modificata la larghezza, e talvolta l'evento contenuto estende poche righe (poiché questo elemento <a> è all'interno di un <div> che è larghezza è fissa).

Desidero che la posizione orizzontale dello > inizi alla fine della riga più lunga. Cioè, quando lo do che right:0; regola, dovrebbe essere a destra la maggior parte bordo dell'elemento (la posizione verticale non importa in questo momento):

enter image description here

Questo è il modo in cui si comporta in FF , ma in Chrome e IE, il > appare alla fine della fila più corta:

enter image description here

mi piacerebbe capire che cosa provoca la differenza tra i browser, ma ancora più importante, mi piacerebbe tutto i browser si comportano come FF - posizionando lo :after alla fine della riga più lunga. È possibile?

ho messo su the above code dabblet

+1

L'elemento 'a', essendo un elemento in linea relativamente posizionato, è il blocco contenitore per il suo pseudo-elemento': after', che è posizionato in modo assoluto. Il problema è che il testo nel tuo 'a' è multilinea, e la [spec] (http://www.w3.org/TR/CSS21/visudet.html#containing-block-details) dice che non definisce il forma o dimensioni di un blocco contenitore in tale scenario. Questo è il motivo per cui osservi le differenze nel comportamento del browser: in altre parole, i browser non sanno cosa fare in un tale scenario in modo che facciano quello che pensano sia il migliore. – BoltClock

risposta

5

Questo perché il vostro elemento a è impostato per visualizzare inline di default, e Firefox gestisce posizionamento all'interno inline elementi in modo leggermente diverso a Chrome e IE.

Per correggere questo sia in Chrome e IE (pur mantenendo l'aspetto di Firefox), semplicemente dare il vostro elemento a un display inline-block:

a { 
    position:relative; 
    display:inline-block; 
} 

Modified Dabblet demo.

+0

Grazie mille! Tuttavia, ho 2 problemi con questa soluzione: 1) ci sono ancora differenze tra i browser nella posizione di '>'. Il Chrome lo posiziona molto più a destra di FF. 2) Ciò significa che il testo del link è breve, '' 'sarà molto lontano dalla sua fine. Mi piacerebbe che il '>' sia posizionato proprio alla fine del testo del link ... –

+1

@LeaCohen questo sembra essere causato da differenze nel rendering del testo. In Firefox la parte "hkfjg sdfg dsfjg jsdflgj ldsfjgl" riempie quasi il contenitore 200px prima di scendere su una nuova linea, tuttavia in Chrome quella parte è circa 20px diversa. Non sono sicuro di cosa suggerire di risolvere questo problema poiché questo è controllato dal browser (e dalle eventuali impostazioni basate sui font del browser che un utente può aver abilitato) più del CSS calcolato. –

Problemi correlati