2010-02-23 16 views
14

Questo mi causerà un dolore indicibile se lo metto in cima al mio foglio di stile?È * {position: relative} una cattiva idea?

* {position:relative} 
+1

Titolo e domanda non corrispondono realmente: -? –

+0

Beh, se quello che ho suggerito fosse una buona idea, andrei avanti e deprecare il posizionamento statico .. Sì, corrispondono a IMO. –

+0

"Beh, se quello che ho suggerito fosse una buona idea, andrei avanti e deprecare il posizionamento statico." Buono per te, ma non è lo stesso di 'posizione: relativo;' in realtà * è * deprecato (che richiederebbe Specifiche CSS per affermare che è deprecato, che non lo fa). –

risposta

2

I caratteri jolly possono causare problemi di prestazioni se non utilizzati con attenzione. Questo probabilmente non sarebbe il caso nel tuo esempio, ma è una cattiva abitudine da sviluppare.

Ma ancora più importante, è raro che si possa dire in modo definitivo che si desidera applicare qualsiasi comportamento a tutti gli elementi.

Con posizionamento relativo, si al meglio ottenere nulla e nel peggiore dei casi creare molti mal di testa per se stessi cercando di risolvere le cose che normalmente "solo lavoro".

Il posizionamento relativo ha sicuramente i suoi usi. Applicalo quando ne hai bisogno.

+0

considera il problema flottante il problema più grande. da quando ho fatto questa domanda, mi sono trasferito a fluttuare praticamente tutto nel mio DOM, quindi mi sono quasi sparato ai piedi con questa dichiarazione jolly hey? –

+0

Sì, in genere evito i caratteri jolly del tutto in CSS. È raro che tu possa dire in modo conclusivo che desideri applicare qualsiasi comportamento a TUTTI gli elementi. Il posizionamento relativo ha sicuramente i suoi usi; basta applicarlo quando ne hai bisogno tramite una specifica classe CSS o anche un selettore jQuery. –

11

È questo che va causarmi dolore indicibile se mi attengo ai vertici del mio foglio di stile?

Sì. Non sarà più possibile lavorare con elementi posizionati in modo assoluto, ad esempio: il posizionamento assoluto sarà sempre relativo all'elemento genitore, che non è quasi mai il risultato desiderato.

Immagino che ci siano ancora più effetti collaterali nel campo delle impostazioni z-index.

Non è una buona idea IMO.

E no, position: static è non deprecato, dopo tutto, è l'impostazione di default :)

+0

Mm Cerco di non annidare comunque elementi che sono assoluti rispetto al viewport. Speravo che avrebbe effettivamente ridotto i potenziali problemi z-index tra firefox e ie. –

+0

@ user278457 Non sarai nemmeno in grado di posizionare in assoluto l'elemento genitore del genitore più in quel modo. E correggimi se sbaglio, ma non riesco a vedere come questo risolverà i problemi degli z-index dei browser. –

+0

Ok, penso di vedere cosa stai ricevendo. Non penso in questo modo, o non ne ho ancora bisogno. Preferisco usare due "sinistra: 10" di una "sinistra: 10" sul genitore e una "sinistra: 20" sul bambino. Suppongo sia una buona idea lasciare l'opzione aperta se non ti senti particolarmente disciplinato un giorno. –

3

E 'una cattiva idea imho come cambia il comportamento predefinito di elementi senza un'indicazione chiara e avrà avere conseguenze impreviste.

Se si desidera che la maggior parte degli elementi sia posizionata relativa, si potrebbe voler pensare semplicemente a creare div e un parente simile.

+0

Un'idea molto migliore. Penso che proverò a inserire un div {position: relative} nel mio reset css. –

+0

@ user278457 è ancora un'idea orribile.Potrebbe funzionare per te ora, ma cosa succede se un giorno hai bisogno di posizionamento assoluto, o devi includere un widget esterno. –

+0

Potrei dare ancora una posizione assoluta. Non lo anniderò in un altro div. Davvero non vedo perché tu nidifichi qualcosa che è posizionato rispetto al viewport. Vuoi dire se sto progettando qualcosa che dovrebbe essere incluso in un sito esterno, giusto? –

2

Rispondendo alla domanda del titolo:

Questa è l'attuale CSS 2.1 spec:

http://www.w3.org/TR/CSS2/visuren.html#propdef-position

valori accettati includono static, relative, absolute, fixed e inherit.

io non sono sicuro di CSS 3 (è ancora work in progress), ma non sembrano parlare static:

http://www.w3.org/Style/CSS/current-work#positioning

Qualunque cosa, non mi interessa davvero ancora :)

Rispondendo alla domanda del corpo:

il valore predefinito è static in modo che ci si stia cambiando la proprietà per ogni singolo elemento della pagina. Il meglio che puoi ottenere è nulla. Il peggio è che probabilmente creerai strani effetti collaterali che non ti accorgerai nemmeno a prima vista.

Inoltre (questa è pura speculazione al mio fianco), non può essere buono per le prestazioni. Sono sicuro che i motori di rendering sono ottimizzati per avere la maggioranza di elementi statici.

+0

Buon punto. Ma il modo in cui descrivono la posizione relativa implica che sia "relativo" a qualche misteriosa proprietà anonima che opera "come definito dal modello di box". L'ID –

2

Giusto per dare l'altro lato della medaglia, ho usato parecchio questa impostazione e l'ho trovata utile. L'avanzamento principale è la facilità di utilizzare le proprietà di posizionamento (superiore, sinistra, destra, inferiore) senza dover definire il posizionamento relativo sul genitore tutto il tempo.

E 'vero che questa impostazione l'impossibilità di utilizzare il posizionamento assoluto in relazione a qualsiasi altra cosa che il genitore proprio sopra, ma trovo che questo sia una buona cosa. Poiché il primo genitore con 'position: relative' è visivamente di fatto un genitore di qualsiasi bambino con 'position: absolute', allora è solo logico renderli figli diretti anche nella gerarchia HTML.

In breve * {position:relative} costringe una convenzione che rende più facile ragionare come funziona posizionamento.

Caveat 1: Evento se la nuova convenzione semplifica le cose a nuovi arrivati, è diverso da quello che gli esperti sviluppatori di CSS sono usati. Preparati ad affrontare l'opposizione se inizi a usarlo nel grande progetto con molti sviluppatori di frontend.

Avvertenza 2: il problema di prestazioni deve essere testato correttamente. Ho provato a attivare e disattivare questa impostazione su alcuni grandi siti senza notare alcuna differenza, ma non esistono test reali con numeri reali (a mia conoscenza).

Nota finale: la prima riga del secondo paragrafo non è del tutto vera. È sempre possibile sovrascrivere le definizioni di caratteri jolly, impostando il nodo di livello intermedio position: static, se necessario.

+0

Questo causa problemi di prestazioni in Opera 12 (l'ultima versione che utilizza il motore Presto) quindi fai attenzione. L'impostazione di z-index su qualsiasi numero risolve il problema. – tomasz86

+0

Inoltre provoca strani bug in Firefox con celle di tabella con padding impostato in percentuale. – tomasz86

Problemi correlati