Domanda

Così ho recentemente giocato in giro con i compilatori CSS, ma non ho idea di come (o se è possibile) per generare dinamicamente pezzi di un selettore.

Per esempio, diciamo che ho voluto fare per ottenere mixins

display: inline-block; 

di lavorare cross browser. Avrei dovuto fare gli stili, sì, ma avrei dovuto fare gli hack IE6 / 7 selettore per farli lavorare in tali browser troppo. Idealmente Sto cercando un una tantum cosa da aggiungere a un elemento e hanno la capacità per questo al lavoro. Qualche persona gentile recentemente mi ha dato questa soluzione: CSS compilatori e conversione hack IE al condizionale css

e sarebbe bello per realizzare che in un modo minimale che mi permettesse di specificarlo per un dato elemento e per la mia strada (per esempio in meno, è possibile creare una classe con gli stili, passare quella classe ad un altro elemento, e che elemento si ereditano tutti quegli stili sarebbe bello passare un .inline blocco elemento,. e creano gli stili necessari per supportare IE6 / 7, senza dover ricorrere a cose come

_color: pink; 

Tutte le idee?

EDIT: per esempio, così, come potrei fare qualcosa di simile clearfix di meno? (Lesscss.org)? Se Sass solo può farlo allora che funzionerà anche.

È stato utile?

Soluzione

Così ho fatto qualche scavo nella documentazione, e un po 'di sperimentazione, e Sass (con mio grande sollievo) supporta questo, anche se non credo MENO fa (che è il motivo per cui si sta facendo abbandonato in favore del Sass).

È possibile utilizzare la e commerciale come puntatore al selettore si è utilizzato nella definizione, e la posizione di quella commerciale in una dichiarazione nidificato non deve essere al fronte, si può mettere selettori prima di esso. Per esempio, è possibile utilizzare i tag condizionali di IE a bersaglio IE nello stesso foglio di stile in un modo che non fa uso di hack. Di seguito utilizza la notazione SCSS (ma dovrebbe funzionare bene con la notazione indentazione):

@mixin inline-block {

// Cross browser implementation of the inline-block attribute

  display: inline-block;
  body.ie6 & { display: inline; }
  body.ie7 & { display: inline; }

}

E tutto quello che dovete fare è cadere questo su tutto quello che vuoi:

#foo { @include inline-block; }

e genererà / gestire tutta la tua roba inline-block cross browser:

#foo { display: inline-block; }
body.ie6 #foo { display: inline; }
body.ie7 #foo { display: inline; }

modo semantico di gestire problematiche cross-browser, non più avere a che fare con il metodo ingombrante di gestire 2 file diversi per gli stili (che è stupido per me), non più codice del blocco brutture.

Modifica:. Certo che la funzionalità è stato indicato nella documentazione di vecchio, non nella nuova, motivo per cui non sono riuscito a trovarlo

Altri suggerimenti

Un'implementazione cross-browser di inline-block è fornita da bussola, un quadro costruito sopra sass:

http: // Bussole- style.org/docs/reference/compass/css3/inline_block/#mixin-inline-block-scss

http://jsfiddle.net/zsitro/G74pT/

Qui van vedere la soluzione crossbrowser per i blocchi in linea.  semplice e breve.

Sopra esempio non darà un layout per l'elemento in IE. È necessario zoom per esempio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top