2012-03-02 1 views
5

Dopo aver scavato in giro su SO ho trovato this come la migliore risposta per il mio bisogno di avere angoli arrotondati per i tavoli.Tavoli angolari arrotondati con LESS

Il che mi portano alla seguente frammento di CSS:

.greytable tr:first-child th:first-child { 
    -moz-border-radius-topleft: 5px; 
    -webkit-border-top-left-radius: 5px; 
    border-top-left-radius: 5px; 
} 

.greytable tr:first-child th:last-child { 
    -moz-border-radius-topright: 5px; 
    -webkit-border-top-right-radius: 5px; 
    border-top-right-radius: 5px; 
} 

.greytable tr:last-child td:first-child { 
    -moz-border-radius-bottomleft: 5px; 
    -webkit-border-bottom-left-radius: 5px; 
    border-bottom-left-radius: 5px; 
} 

.greytable tr:last-child td:last-child { 
    -moz-border-radius-bottomright: 5px; 
    -webkit-border-bottom-right-radius: 5px; 
    border-bottom-right-radius: 5px; 
} 

ora mi piacerebbe sapere come ho potuto semplificare tutto questo con meno. Ho provato il seguente codice LESS:

.border-radius (@v, @h, @radius: 5px) { 
    [email protected]@h: @radius; 
    [email protected]@h: @radius; 
    [email protected]@h: @radius; 
} 

E poi richiamarlo (per l'angolo in alto a sinistra):

.greytable tr:first-child th:first-child { 
    .border-radius('top', 'left') 
} 

Ma non funziona (errore sulla seconda riga dello snippet di meno) .

Grazie in anticipo!

risposta

7

Potrebbe essere necessario utilizzare la sintassi della stringa di interpolazione, provate questo:

.border-radius (@v, @h, @radius: 5px) { 
    [email protected]{v}@{h}: @radius; 
    [email protected]{v}[email protected]{h}-radius: @radius; 
    [email protected]{v}[email protected]{h}-radius: @radius; 
} 

Vorrei anche aggiungere che WebKit e Mozilla sono in gran parte al passo con la border-radius proprietà standard, ed i prefissi vendor stanno diventando obsoleti per questo.


EDIT: sembra che l'interpolazione stringa non sta lavorando per questo compito (il codice di cui sopra non viene compilato), quindi ecco una mixin soluzione che sarà effettivamente più facile da usare:

.rounded-table(@radius) { 
    tr:first-child th:first-child { 
     -moz-border-radius-topleft: @radius; 
     -webkit-border-top-left-radius: @radius; 
     border-top-left-radius: @radius; 
    } 
    tr:first-child th:last-child { 
     -moz-border-radius-topright: @radius; 
     -webkit-border-top-right-radius: @radius; 
     border-top-right-radius: @radius; 
    } 
    tr:last-child td:first-child { 
     -moz-border-radius-bottomleft: @radius; 
     -webkit-border-bottom-left-radius: @radius; 
     border-bottom-left-radius: @radius; 
    } 
    tr:last-child td:last-child { 
     -moz-border-radius-bottomright: @radius; 
     -webkit-border-bottom-right-radius: @radius; 
     border-bottom-right-radius: @radius; 
    } 
} 

Usage:

.greytable { 
    .rounded-table(10px) 
} 

uscita:

.greytable tr:first-child th:first-child { 
    -moz-border-radius-topleft: 10px; 
    -webkit-border-top-left-radius: 10px; 
    border-top-left-radius: 10px; 
} 
.greytable tr:first-child th:last-child { 
    -moz-border-radius-topright: 10px; 
    -webkit-border-top-right-radius: 10px; 
    border-top-right-radius: 10px; 
} 
.greytable tr:last-child td:first-child { 
    -moz-border-radius-bottomleft: 10px; 
    -webkit-border-bottom-left-radius: 10px; 
    border-bottom-left-radius: 10px; 
} 
.greytable tr:last-child td:last-child { 
    -moz-border-radius-bottomright: 10px; 
    -webkit-border-bottom-right-radius: 10px; 
    border-bottom-right-radius: 10px; 
} 
+0

Ho corretto l'errore di hardcoding, è possibile modificare di conseguenza. Grazie molto! – janosrusiczki

+0

Ancora non funzionerà, almeno con WinLess. – janosrusiczki

+0

Sì, sono stanco e troppo stanco per capirlo al momento. Controllerò domani e vedrò come hai fatto. –