2013-06-17 13 views
15

W jaki sposób określa się faktyczną szerokość kolumn w tabeli? Poniższy kod wygląd (w Chrome) tak:Jak jest określona szerokość kolumny w przeglądarce?

rendered table

Moim problemem jest to, że dodanie żadnych więcej znaków do celi z „ddd ...” wolna przestrzeń nie jest używany, ale treść inne komórki zostają opakowane. Czasami problem polega na tym, że teksty "aaa ..." i "ccc ..." nie zachodziłyby na siebie. Całkowity rozmiar tabeli jest stały, ale cała zawartość jest dynamiczna, więc nie jest preferowany stały układ.
Aktualizacja: pomimo tego, że zawiera mniej tekstu niż jakakolwiek z kolumn rzeczywistych, pierwszy wiersz (c1-c4) ma całkiem znaczący (pozytywny) wpływ na ostateczny układ.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> 

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <style type="text/css"> 
     body {background:#000; color:#fff; font-family:'Tahoma'; font-weight:600; } 
     .container {width:670px; } 
     table {font-family:'Tahoma'; font-weight:600; border-color: #ffffff; border-width:1px; } 

.detail table{margin-left:20px; font-size:24px; width:650px;} 
.detail table .operational {text-align:right;} 
    </style> 
</head> 
<body> 

<div class="detail"> 

    <table border="1px" cellpadding="0px" cellspacing="0px" > 
     <tbody> 
     <!-- first row and borders only for debuging--> 
     <tr> 
      <td >c1</td> 
      <td >c2</td> 
      <td >c3</td> 
      <td >c4</td> 
     </tr> 

     <tr > 
      <td class="caption">Date</td> 
      <td class="value">17.6.2013</td> 
      <td class="operational" colspan="2">aaaaaaaaaaaaaaaaaaaaaaa</td> 
     </tr> 

     <tr > 
      <td class="caption">bbbbbbbb</td> 
      <td class="value" colspan="2">ccccccccccccccc ccc</td> 
      <td class="operational">dddddddddddddd</td> 
     </tr> 

     <tr > 
      <td class="caption">bbbbbb bbb</td> 
      <td class="value" colspan="3">eeeeeeeeeeeeeeeeeeeeeeeeeeeee</td> 
     </tr> 

     <tr > 
      <td class="caption">bbb bbbbbb</td> 
      <td class="value" colspan="3">xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxx</td> 
     </tr> 
     </tbody> 
    </table> 
</div> 

</body></html> 

Odpowiedz

18

Od http://www.w3.org/TR/CSS21/tables.html

To nie było nadpisane przez CSS3 jeszcze, ale ta część specyfikacji jest nienormatywne, więc prawdopodobnie przeglądarek nie zastosuje się do niej dokładnie (nie ma normatywną definicję tego zachowania AFAIK).

szerokości kolumn są określone w następujący sposób:

  1. Obliczenie minimalnej szerokości zawartość (MCW) w każdej komórce: sformatowany zawartość może obejmować dowolną liczbę linii ale nie może wypłynąć z ogniwie. Jeśli określona "szerokość" (W) komórki jest większa niż MCW, W stanowi minimalną szerokość komórki. Wartość "auto" oznacza, że ​​MCW jest minimalną szerokość komórki MCK. Należy również obliczyć "maksymalną" szerokość komórki w każdej komórce: formatowanie zawartości bez przerywania linii innych niż w przypadku wystąpienia jawnego podziału wierszy .
  2. Dla każdej kolumny określ maksymalną i minimalną szerokość kolumny z komórek , które obejmują tylko tę kolumnę. Minimalna wymagana jest przez komórkę o największej minimalnej szerokości komórki (lub w kolumnie "szerokość", , w zależności od tego, która wartość jest większa). Maksymalna wartość jest wymagana przez komórkę o największej maksymalnej szerokości komórki (lub szerokości kolumny, w zależności od tego, która z wartości jest większa o 1).
  3. Dla każdej komórki, która obejmuje więcej niż jedną kolumnę, należy zwiększyć co najmniej szerokości kolumn, które obejmuje, tak aby razem były one co najmniej tak szerokie jak komórki jako . Zrób to samo dla maksymalnej szerokości. Jeśli to możliwe, poszerzy wszystkie połączone kolumny o mniej więcej taką samą kwotę.
  4. Dla każdego elementu grupy kolumn o "szerokości" innej niż "auto", zwiększają minimalne szerokości kolumn, które obejmuje, tak aby razem były co najmniej tak szerokie, jak szerokość "grupy kolumn".

Daje to maksymalną i minimalną szerokość dla każdej kolumny.

Minimalna szerokość podpis (CAPMIN) określa się poprzez obliczenie dla Każdy napis minimalną napisów zewnętrzną szerokość jak MCW z hipotetycznej komórki tabeli, która zawiera podpis sformatowanych „display: blok”. Największa z zewnętrznych szerokości napisów to CAPMIN.

kolumnę i podpis szerokości wpływ na ostateczną szerokość następującej tabeli:

  1. Jeżeli „tabela” lub „inline tabela” „szerokość” własności elementu ma obliczona wartość (W) innych niż „auto ", używana szerokość jest większa od W, CAPMIN i minimalnej szerokości wymaganej przez wszystkie kolumny plus komórka odstępy lub krawędzie (MIN). Jeśli użyta szerokość jest większa niż MIN, dodatkowa szerokość powinna być rozłożona na kolumnach.
  2. Jeśli element "table" lub "inline-table" ma "width: auto", używaną szerokością jest większa z tabeli zawierającej szerokość bloku, CAPMIN i MIN. Jeśli jednak CAPMIN lub maksymalna szerokość wymagana przez kolumny plus odstępy między komórkami lub krawędzie (MAX) są mniejsze niż blok zawierający , użyj max (MAX, CAPMIN).

Wartość procentowa szerokości kolumny odnosi się do szerokości stołu. Jeśli tabela ma "szerokość: auto", wartość procentowa reprezentuje ograniczenie na szerokość kolumny, którą UA powinna usatysfakcjonować. (Oczywiście, nie zawsze jest to możliwe: jeśli szerokość kolumny wynosi "110%", ograniczenie nie może zostać spełnione.)

-2

Tabele są "płynne" w swoim rozmiarze. Oznacza to, że możesz określić rozmiar, ale jeśli zawartość potrzebuje więcej miejsca, wtedy tabela zwiększy rozmiar do wymaganego.

Masz określony:

.detail table{margin-left:20px; font-size:24px; width:650px;} 

To może być traktowane jako minimalna szerokość na stole.

Powiązane problemy