2010-04-27 14 views
33

Ho un foglio di stile e molti stili con lo stesso colore del bordo (#CCCCCC per la precisione).Come posso riutilizzare un colore in un foglio di stile?

C'è un modo per specificare un qualche tipo di variabile e riutilizzo che, così invece di digitare #CCCCCC più e più volte, posso digitare:

border: 1px solid $bordercolor; 

P.S. Sto usando ASP.NET MVC.

+0

Non che ne sia a conoscenza, ma è possibile generare il CSS da una pagina .NET. (Aggiunta risposta sotto con un maggior dettaglio) – CaffGeek

+0

+1 Domanda eccellente. Ho anche questo problema. –

+0

Non so se è applicabile (e l'ho usato a malapena), ma Sass (http://sass-lang.com/) sembrerebbe coprire questo. È scritto in Ruby (credo), ma ora * è * IronRuby ... –

risposta

10

Non che io sappia, ma si potrebbe generare il CSS da una pagina di .NET.

Quindi chiamare con

E StyleSheet.aspx sarebbe simile

<%@ Page Language="C#" %> 
H1 
{ 
    background-color:<%= MyColourVariable %>; 
} 

EDIT: Comunque, oggi vi suggerirei di usare LESS o SASS

+1

La creazione dinamica di un file css impedisce la memorizzazione nella cache? – Jens

+1

Jens, no. La memorizzazione nella cache dipende dal tipo di mime dell'asset servito e dalle proprietà specifiche sulla risorsa visualizzata dal browser, che variano a seconda del browser, per determinare se la cache è senza dati. –

+1

E si può sempre aggiungere il caching della pagina se si desidera controllarlo sul lato server (quindi non viene ricreato sul server ogni volta) http://support.microsoft.com/kb/308375 – CaffGeek

0

È possibile impostare lo stile del bordo per un tag principale. Ad esempio, se ogni elemento nel tuo #content utilizza queste proprietà del bordo, puoi applicare lo stile del bordo desiderato a #content stesso.

0

Estendere lo stile all'interno del colore è definito

LE: vedere l'esempio da KennyTM

+0

-1: nessun contenuto reale. – ANeves

24
.classA, .classB, .classC { 
    border-color: #CCC; 
} 

.classA { 
    border-width: 1px; 
    border-style: solid; 
} 

... 

Ma si può' t utilizzare la sintassi per le scorciatoie per definire il bordo più.

+0

Bello, in realtà non lo uso, mettendo i selettori più di una volta nel foglio di stile. sto vedendo questo come codice CSS inverso: non dire "classA è border-color this e font that", ma dire "border-color questo è applicato a ClassA e ClassB e font che viene applicato alla Classe C". Molto bella. – Michel

+0

Faccio regolarmente questo tipo di cose, se non voglio bordi su tutti i lati, cioè 'border-width: 1px 0; border-style: solido; border-color: # ccc' – DisgruntledGoat

11

Un elemento può avere più classi assegnate. Così si potrebbe creare uno stile che definisce si Colore bordo e utilizzarlo in combinazione con altre classi per altri attributi:

.bordercolor { border-color:#CCCCCC; } 

<div class="bordercolor otherstyle"> 
1

Oltre a generare da una pagina di .NET si potrebbe utilizzare una sorta di pre-processore. Ce ne sono di uso generale come m4 o CSS specifici come LESS.

3

Puoi servire il tuo CSS come file php con il tipo text/css. Quindi in questo modo puoi usare tutte le variabili PHP che vuoi. Funziona su tutti i browser. Ecco un esempio:

http://mailmarkup.org/mmlorg.php

7

Non si può davvero definire le variabili in CSS, ma si può fare una sorta di cosa siete dopo alcuni modi. Innanzitutto, puoi applicare più classi al tuo elemento e mantenere il colore nella propria classe.

.myBorderColor { border-color: #000000; } 
.myOtherClass { font-weight: bold; } 

<div class="myBorderColor myOtherClass">content</div> 

L'altra alternativa è quella di collegare in cascata in realtà gli stili così viene applicato più di 1 isolato.

div.a { font-weight: bold; } 
div.b { color: #cccccc; } 

div.a div.b { border-color: #000000; } 

In questo modo si controlla ancora il colore da 1 posto.

+3

Assicurati solo di non seguire lo stile utilizzato dal nostro web designer e di assegnare un nome alle classi "fontbold" e "borderblack"/"bordergray"/"borderblue" ... Questo stile è davvero pessimo i nomi dovrebbero dire come è usato, non come appare. – dbemerlin

+0

L'uso di una classe '.myBorderColor' è esattamente ciò a cui dbmerlin fa riferimento. – ANeves

+0

@dbemerlin Penso che quando inizierò ad applicare questa tecnica sarei tentato anche di usare nomi come borderblue e borderblack, perché penso che all'inizio sarebbe facile usare questo tipo di nomi invece di nomi più descrittivi. Ma hai ragione, non è la strada da percorrere. – Michel

4

Penso che potresti riferirti a CSS variables. Sfortunatamente non sono ben supportati.

+0

Sarebbe bello * se * fosse supportato ... –

+0

Sì! ma in effetti, purtroppo ... – Michel

2

Un numero di persone ha fatto HttpHandler che aggiunge supporto variabile al CSS.Fondamentalmente, HttpHandler si occupa di sostituire le variabili con i loro valori prima che il client veda il CSS. Gli esempi includono:

Questo sarà certamente il lavoro. Non l'ho provato in nessuna delle mie applicazioni, quindi non posso parlare delle implicazioni sulle prestazioni.

8

Si potrebbe anche utilizzare un CSS "di livello superiore". Sass e Less offrono entrambe le variabili. Funzionano scrivendo in un linguaggio che è un superset di CSS e quindi lo si compila nei CSS durante il test/distribuzione. Ci sono degli hook per RoR per entrambi, ce ne potrebbe essere uno per asp.net.

+0

cool. Meno sembra molto promettente. – Michel

+1

Devo dire che Sass ha una sintassi alternativa che è simile ai CSS. –

1

Stavo pensando anche al modello T4. È solo Visual Studio, quindi non è il modo più generico di andare, ma ho pensato di condividerlo.

<#@ template inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation" language="C#v3.5" debug="true" hostSpecific="true" #> 
<#@ output extension=".css" #> 
<# string font = " font-family: Verdana, Helvetica;\n\tfont-size: 11px;";#> 

body { 
    <#= font #> 
} 
table.Bid { 
    background-color:red; 
    <#= font #> 
} 

Questo genera un file test.css con questo contenuto:

body { 
    font-family: Verdana, Helvetica; 
    font-size: 11px; 
} 
table.Bid { 
    background-color:red; 
    font-family: Verdana, Helvetica; 
    font-size: 11px; 
} 
Problemi correlati