Posizionamento assoluto all'interno della posizione assoluta


92

Ho 3 divelementi.

Il primo divè più grande (avvolgimento) e haposition:relative;

Il 2 ° divè posizionato in assoluto rispetto al 1 ° divposizionamento relativo (ed è incluso nel 1 ° div)

Il 3 ° divè contenuto nel 2 ° dive ha anche il posizionamento assoluto.

<div id="1st">
   <div id="2nd">
     <div id="3rd"></div>
   </div>
</div>

Perché la 3a divposizione è assoluta rispetto alla 2a div(che è anche posizione assoluta alla 1a div) e non alla 1a divche ha posizione relativa?

Perché il 3 ° divè il posizionamento assoluto rispetto al 2 ° posto assoluto div.


Questo è davvero quello che sto cercando e queste risposte alle tue domande mi hanno aperto gli occhi: \.
Benjamin

assoluto: l'elemento è posizionato rispetto al suo primo elemento antenato posizionato (non statico)
Oswaldo Zapata

Risposte:


95

Perché position: absoluteripristina la posizione relativa per i bambini proprio come position: relativefa.

Non c'è modo di aggirare questo: se vuoi che il terzo divsia posizionato in modo assoluto rispetto al primo, dovrai renderlo un figlio del primo.


Quindi fondamentalmente la posizione assoluta diventa posizione relativa per il suo bambino posizionato in modo assoluto?
pufos

@pufos tipo di. La 0px / 0pxposizione per i bambini viene ripristinata dalposition: absolute
Pekka

25
@pufos Penso che tu stia confondendo un po '. position:relativesignifica che l'elemento sarà posizionato (usando in alto, a destra, in basso a sinistra) relativamente dalla sua posizione corrente. position: absolutesignifica che verrà posizionato rispetto alla finestra del browser o al primo genitore con position: absoluteo position: relative.
seler

Puoi condividere un riferimento a questo in linea? Perché non sono riuscito a trovarne ... E ... Grazie mille
pufos

2
@pufos il riferimento di base è qui: w3.org/TR/CSS2/visuren.html#choose-position
Pekka

27

Entrambi position:relativee position:absolutestabiliscono elementi contenitori come ascensori di posizionamento.

Se hai bisogno che il div 3 sia posizionato in base al div 1, rendilo un figlio diretto del div 1.

Notare che position: relativesignifica che l'elemento è posizionato rispetto alla sua posizione naturale e position: absolutesignifica che l'elemento è posizionato rispetto al suo primo position:relativeo position:absoluteantenato .


Volevo che il 3 ° div fosse posizionato in modo assoluto rispetto al div in posizione assoluta ma non sapevo se fosse standard (crossbrowser) .. e non sono riuscito a trovare le specifiche online ... Grazie mille
pufos

Posizionamento assoluto in quella sezione: w3.org/TR/CSS21/visuren.html#comp-abspos
Mike Tunnicliffe

@MikeTunnicliffe assoluto significa che l'elemento è posizionato rispetto alla sua prima posizione: fixed also
Trần Kim Dự

15

Posizione statica: la posizione statica è il modo predefinito in cui un elemento apparirà nel flusso normale del file HTML se non viene specificata alcuna posizione.

Importante: top, right, bottome leftle proprietà hanno alcun effetto su uno STATICAMENTE POSIZIONATA ELEMENTO.

Posizione relativa: posizionare un elemento con il valore relativo mantiene l'elemento (e lo spazio che occupa) nel normale flusso del tuo file HTML.

È quindi possibile spostare l'elemento da una certa quantità utilizzando le proprietà left, right, tope bottom. Tuttavia, ciò potrebbe far sì che l'elemento si sovrapponga ad altri elementi che si trovano sulla pagina, il che potrebbe essere l'effetto desiderato o meno.

Un elemento relativamente posizionato può spostarsi dalla sua posizione, ma lo spazio che occupava rimane.

Posizione assoluta: l' applicazione del valore di posizione assoluta a un elemento lo rimuove dal flusso normale. Quando si sposta l'elemento posizionato in modo assoluto, il suo punto di riferimento è la parte superiore / sinistra dell'elemento contenitore più vicino che ha una posizione dichiarata diversa da statica, chiamata anche contesto di posizionamento più vicino. Quindi, se non esiste alcun elemento contenitore con una posizione diversa da statica, verrà posizionato dall'angolo superiore sinistro dell'elemento del corpo.

Nel tuo caso il contenitore contenitore più vicino al 3 ° è il 2 °.


4

Ancora un'altra risposta chiarificatrice.

Il tuo scenario attuale è questo:

#my-parent {position: absolute}
#my-parent .my_child {position: absolute}

E stai un po 'lottando con esso.

Se puoi modificare l'HTML, fai semplicemente questo:

#my-parent {position: absolute}
#my-parent .my-wrapper {position: relative}        /* Since you've added the wrapper in HTML */
#my-parent .my-wrapper .my-child {position: absolute}  /* Now you can play with it */

2
my-wrapper probabilmente dovrebbe essere .my-wrapper
jdavid.net

Questo approccio è sorprendente, non ho ancora idea del perché abbia risolto il mio problema. Il mio problema è che non posso fare in modo che il mio terzo elemento sia figlio del primo elemento per qualche altra ragione.
windmaomao

2

Il motivo per cui il 3 ° divelemento è posizionato in modo assoluto rispetto al 2 ° divelemento è perché, come spiegato qui dalle specifiche CSS , è perché l'elemento "genitore" (meglio detto: blocco contenente) di un elemento posizionato in modo assoluto non è necessariamente il suo elemento genitore immediato, ma piuttosto il suo elemento posizionato immediatamente , ovvero qualsiasi elemento la cui posizione è impostata su qualsiasi cosa tranne che staticper esempioposition: relative/absolute/fixed/sticky;

Quindi, quando possibile nel tuo codice, se vuoi che il terzo divelemento sia posizionato in modo assoluto rispetto al primo div, dovresti rendere il tuo secondo divelemento come il position: static;suo valore predefinito (o semplicemente rimuovere qualsiasi position: ...dichiarazione nel set di regole del tuo secondo divelemento) .

Quanto sopra renderà il 1 ° divil blocco contenitore del 3 ° assolutamente posizionato div, ignorando il 2 ° divper questo scopo di posizionamento.

Spero che sia d'aiuto.


0

Nel caso qualcuno stia ancora cercando una risposta a questo.

Sono stato in grado di ottenere questo risultato aggiungendo uno clear: both;stile al primo div posizionato in modo assoluto che ha resettato il bambino e gli ha permesso di utilizzare il proprio absoluteposizionamento.

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.