2015-05-06 12 views
9

Quindi, ho il mio elemento genitore posizionato relativo, in modo da consentire che un elemento del tooltip sia posizionato al suo interno, nella parte superiore. Sono consapevole che è necessario aggiungere "left: 0, right: 0", in modo che la larghezza dell'elemento possa ancora essere impostata su auto, cosa che ho fatto. Tuttavia, il mio elemento genitore ha una larghezza fissa, a cui viene trattenuto il suggerimento, quindi la larghezza automatica non può uscire da essa, c'è un modo per aggirare questo?Elemento assoluto posizionato CSS, larghezza automatica esterna ai limiti del genitore?

CSS:

.parent { 
    position: relative; 
    width: 100px; 
    height: 100px; 
} 

.tooltip { 
    position: absolute; 
    top: 0; 
    left: 0; 
    right: 0; 
    margin: 0 auto; 
    text-align: center; 
    width: auto; 
    padding: 5px 10px; 
} 

elementi:

<div class="parent"> 
    <div class="tooltip">Text goes here</div> 
</div> 

No JS per favore, alla ricerca di una soluzione CSS, grazie!

+0

'{a destra: -20px}' – isherwood

+0

Sembra che il CSS ha bisogno di '.tooltip' invece di' .child' ... –

+0

@HonoreDoktorr Questo è stato solo un errore quando si cambiano i nomi di classe per qui. – Danny

risposta

25

Non impostare sia left e right su .tooltip, e l'impostazione white-space: nowrap dovrebbe farlo:

.tooltip { 
    position: absolute; 
    top: 0; 
    left: 0; 
    margin: 0 auto; 
    text-align: center; 
    width: auto; 
    padding: 5px 10px; 
    white-space: nowrap; 
} 

Working example.

È necessario utilizzare this solution per centrare un elemento assoluto. Richiede un elemento aggiuntivo, però. Demo

+0

Grazie, funziona in termini della larghezza, ma ora il mio elemento non è più centrato all'interno del genitore, purtroppo! – Danny

+1

Puoi usare 'margin-left: -50%' per quello (e non fare il 'margine: 0 auto', che non centrerà i blocchi posizionati in modo assoluto), anche se ci sono problemi di clipping quando' .parent' è sul lato sinistro della pagina. Vedi http://jsfiddle.net/xkok9v4p/2/ per un esempio. –

+0

@isherwood ha ragione, il mio secondo esempio solo * sembra * funzionare b/c della lunghezza del mio suggerimento di esempio ma questo non lo fa: http://jsfiddle.net/xkok9v4p/4/ –

1

Non ho ancora visto questo problema, ma quello che penso stia succedendo è che width: auto; eredita automaticamente le proprietà del suo genitore. Pertanto, è necessario inserire un numero (width: 50px;) o una percentuale (width: 50%).

+0

Voglio che la larghezza sia fluida in base al suo contenuto, al momento non può andare oltre il 100px del genitore, il testo continua a traboccare al di fuori ma la larghezza dell'elemento attuale è solo 100px – Danny

2

Se .parent può essere fatto in linea, si potrebbe fare .tooltip rendono come un tavolo e sarà AutoSize adattare il suo contenuto, ma a differenza con l'uso di white-space:nowrap, sarebbe anche sostenere un max-width.

.parent { 
    display: inline; 
    position: relative; 
} 

.tooltip { 
    position: absolute; 
    display: table; 
    top: 0; 
    left: 0; 
    text-align: center; 
    padding: 5px 10px; 
    max-width: 200px; 
} 
+1

Questa dovrebbe essere la risposta accettata imo. – StephenRios

Problemi correlati