2013-08-26 7 views
6

Voglio creare una tabella HTML in cui ogni cella è selezionabile e facendo clic su una cella si aggiunge un bordo al singolo div all'interno della cella. Voglio che il bordo di div esista interamente all'interno dei confini esistenti dello td che lo contiene, senza ridimensionare la tabella o le sue celle. Non riesco a farlo accadere correttamente.Utilizzo del ridimensionamento della casella per creare un bordo interno

Questo previous question sembra risolvere lo stesso problema e indica alcuni articoli sulle opzioni CSS per il ridimensionamento della casella. Ho un violino dove ho cercato di implementarlo senza successo: http://jsfiddle.net/YsAGh/3/.

* { 
    box-sizing:border-box; 
    -moz-box-sizing:border-box; 
    -webkit-box-sizing:border-box; 
} 


<table> 
    <tr> 
    <td><div>1</div></td> 
    <td><div>2</div></td> 
    <td><div>3</div></td> 
    </tr> 
    .... 
</table> 

Ecco cosa succede attualmente. Il bordo fa crescere il contenitore td per contenere il bordo di div.

I want the red border to appear without resizing the td

Come posso aggiungere il bordo al div senza influenzare la tabella che contiene?

+3

Potrebbe semplicemente aggiungere un bordo alla classe '.unselected' (cioè .unselected' {border: 2px solido giallo;} 'Non sto mettendo in risposta allora. non risponde alla tua domanda, fornisce solo una soluzione di hacking. – kunalbhat

+0

Hmm, sarei tentato di usare jQuery per ridimensionare la cella nella funzione click, anche se questo potrebbe anche essere considerato un hack anche ... anche se @ kunalbhat's la risposta sarebbe una soluzione molto più elegante, ed è molto semplice: http://jsfiddle.net/YsAGh/4/ – ChrisW

+0

Questo non risolverà il problema, ma è importante mettere la regola non prefissata per ultimo e.g.' * {- webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box;} '. In questo modo, il browser proverà a utilizzare prima la versione corretta/finale non prefissa e poi, se non implementata, riporterà alla versione con prefisso/in sviluppo. – tw16

risposta

1

Guarda il mio JSFiddle.

È necessario fornire una larghezza/altezza per le vostre cellule:

td { 
    // ... 
    width:33.3%; 
    height:33.3%; 
} 
1

ne dite di usare un inserto box-shadow?

.selected { 
    box-shadow: inset 0px 0px 0px 2px red; 
} 
+1

Fai attenzione, questa proprietà in [non compatibile con IE8] (http://caniuse.com/css-boxshadow) (e Windows XP) – glautrou

+0

Ie8 sicuramente non merita la compatibilità, figuriamoci niente di originale – iConnor

+0

Fortunatamente questo è un in -house app e possiamo assumere IE9 + o il più recente Firefox o Chrome. –

1

OK, da quando ho visto un qualche supporto per la mia risposta nei commenti, qui come una risposta :)

Presize tuo cellulare con l'aggiunta di un bordo giallo 'nascosto' allo stato .unselected :

CSS

.unselected { 
    background-color: yellow; 
    border: 2px solid yellow; // Presize with this yellow border 
} 

div { 
    .. 
    line-height: 1; // Add line-height to regulate size (optional) 
} 

Codepen example.

0

Utilizzo di table-layout per risolvere la larghezza di celle e piccolo padding in selected per impedire l'aumento dell'altezza.

table { 
    table-layout: fixed; 
} 
.selected { 
    padding: 1px; 
} 

VediJSFiddle

Problemi correlati