2015-04-08 4 views
7

C'è un modo semplice per selezionare tutti gli elementi a livello di blocco con CSS?Seleziona tutti gli elementi a livello di blocco con css

voglio mettere margine am 1,5 em tra tutti gli elementi a livello di blocco nella principale area di contenuto del mio sito

In questo momento ho un codice simile:

#wrapper .content p, #wrapper .content ul, #wrapper .content div, #wrapper .content ol, #wrapper .content blockquote, #wrapper .content table {margin-top: 1.5em;} 

#wrapper .content p:first-child, #wrapper .content ul:first-child, #wrapper .content div:first-child, #wrapper .content ol:first-child, #wrapper .content blockquote:first-child, #wrapper .content table:first-child {margin-top: 1.5em;} 

che è un dolore reale nel posteriore per leggere o mantenere ...

vorrei sostituirlo con qualcosa di simile:

#wrapper .content *:block + *:block {margin-top: 1.5em;} 

È possibile?

Non riesco a utilizzare * + * perché questo catturerà anche elementi in linea, celle di tabella, ecc. E non voglio che vengano applicati margini casuali nel mezzo dei paragrafi. Inoltre non posso usare #wrapper .content > * perché non verrà annidato div ecc.

+1

Penso che gli elementi incorporati ignoreranno i margini, no? –

+0

@George Garchagudashvili: non esattamente. I margini verticali sugli elementi in linea possono influire sui calcoli di base, che possono avere risultati catastrofici in qualsiasi parte del layout che si basa su blocchi o tabelle in linea. – BoltClock

+0

Il tuo requisito è strano ma non impossibile. Preferisco suggerirti di assegnare classi specifiche agli elementi per i quali hai bisogno di un margine o se sei sicuro di scegliere come target tutti gli elementi del blocco piuttosto che elencarli nel tuo foglio di stile e assegnargli un margine. –

risposta

1

Questo non è possibile con i CSS; non è possibile selezionare un elemento basato su una delle sue proprietà CSS. È necessario utilizzare JavaScript per selezionare tutti gli elementi con qualcosa come getComputedStyle o qualcosa di simile, quindi eseguire una logica di script basata su ciò che trova.

La cosa più vicina che è possibile ottenere in CSS è la selezione degli attributi HTML; cose come href o title.

1

@tylerh answer è corretto non è possibile attivare in puro css nel modo in cui lo chiedi.

Una soluzione possibile con i CSS è quello di creare una classe CSS generica per gestire gli elementi a livello di blocco come .block-element

e quindi applicare lo stile del margine con

#wrapper .content .block-element { margin-top: 1.5em; } 
+0

Vorrei piuttosto elencare tutti gli elementi a livello di blocco nel foglio di stile invece di aggiungere una classe di elementi di blocco a un ovvio elemento a livello di blocco ... –

+0

@ mr-alien e sei libero di farlo. Direi che, a seconda del markup, '.block-element' nella maggior parte delle mie implementazioni rappresenta una griglia o un wrapper di componenti. Ma tutto dipende dal modo in cui il markup e il css sono strutturati. – anderssonola

-1

C'è un modo semplice per seleziona tutti gli elementi a livello di blocco con CSS?

Per impostazione predefinita, gli elementi non di blocco ignorano i margini. Quindi hai risposto alla tua domanda.

+0

Non vero. Vedi i commenti sulla domanda. – BoltClock

+0

Questo non è vero .. http://jsfiddle.net/mr_alien/tLbg9e75/ –

+0

Entrambi ignorate il contesto. Vai a inserire (come richiesto dall'autore) margine superiore e inferiore. Vedi se i margini sono ignorati. E btw bello per te @BoltClock, hai un sacco di xp e non sai di cosa stai parlando, Buona giornata! :) – n1kkou