2013-08-26 12 views
6

Chcę utworzyć tabelę HTML, w której każda komórka jest klikalna, a kliknięcie komórki powoduje dodanie granicy do pojedynczej komórki div. Chcę, aby ta granica div istniała całkowicie w obrębie istniejącej granicy td, która go zawiera, bez zmiany rozmiaru tabeli lub jej komórek w ogóle. Nie wydaje mi się, żeby to się stało poprawnie.Używanie rozmiarów skrzynek do utworzenia wewnętrznej granicy

Wydaje się, że ten numer previous question dotyczy tego samego problemu i wskazuje niektóre artykuły dotyczące opcji CSS rozmiaru pudełka. Mam skrzypce, gdzie próbowałem to bez powodzenia wdrożyć: 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> 

Oto, co się obecnie dzieje. Obramowanie powoduje, że zawierający się plik td rośnie, aby pomieścić granicę div.

I want the red border to appear without resizing the td

Jak mogę dodać obramowanie do div to bez wpływu na tabelę zawierającą?

+3

można po prostu dodać obramowanie do '.unselected' klasy (czyli' .unselected {border: 2px żółto;} 'nie jestem oddanie jako odpowiedź od. to tak naprawdę nie odpowiada na twoje pytanie, po prostu zapewnia rozwiązanie hack. – kunalbhat

+0

Hmm, byłbym skłonny użyć jQuery do zmiany rozmiaru komórki w funkcji kliknięcia, chociaż może to być również za hack ... chociaż @ kunalbhat's Odpowiedź byłaby o wiele bardziej eleganckim rozwiązaniem i jest bardzo łatwa: http://jsfiddle.net/YsAGh/4/ – ChrisW

+0

To nie rozwiąże problemu, ale ważne jest, aby umieścić ostatnią poprawkę jako ostatnią np. * {- rozmiar-pudełka-skrzynki: border-box; -moz-box-sizing: border-box; box-sizing: border-box;} '. W ten sposób przeglądarka spróbuje najpierw użyć poprawnej/ukończonej, nierozwiązanej wersji, a następnie, jeśli nie zostanie zaimplementowana, powróci do poprzedniej/niezamkniętej wersji rozwojowej. – tw16

Odpowiedz

1

Spójrz na moją JSFiddle.

Trzeba zapewnić szerokość/wysokość do komórek:

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

Jak o użyciu box-shadow wstawka?

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

Uważaj, ta właściwość w [nie jest kompatybilna z IE8] (http://caniuse.com/css-boxshadow) (i Windows XP) – glautrou

+0

Ie8 z całą pewnością nie zasługuje na kompatybilność, nie mówiąc już o czymś wyjątkowym. – iConnor

+0

Na szczęście jest to w -domowa aplikacja i możemy założyć IE9 + lub najnowszą przeglądarkę Firefox lub Chrome. –

1

OK, ponieważ Widziałem pewne wsparcie dla mojej odpowiedzi w komentarzach, tutaj jako odpowiedź :)

presize Twoja komórka dodając żółtą „ukryte” granicę stanu .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

Używanie table-layout do ustalania szerokości komórek i małego padding w w selected, aby zapobiec wzrostowi wysokości.

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

ZobaczJSFiddle

Powiązane problemy