2013-08-21 47 views
39

Tôi muốn có một bảng mà trong các cột có thể kéo dài nhưng tôi đang gặp một chút rắc rối với chiều rộng tối thiểu và tối đa trong css.Cột bảng, thiết lập cả chiều rộng tối thiểu và tối đa với css

Cũng dường như theres một số câu trả lời mâu thuẫn xung quanh cách làm việc này:

tôi sẽ muốn có một số điện thoại sau đây:

table{ 
    width:100%; 
} 
.a, .b, .c 
{ 
    background-color: red; 
} 
.a 
{ 
    min-width: 10px; 
    max-width: 20px; 
} 
.b 
{ 
    min-width: 40px; 
    max-width: 45px; 
} 
.c 
{ 
} 

<table> 
    <tr> 
     <td class="a">A</td> 
     <td class="b">B</td> 
     <td class="c">C</td> 
    </tr> 
</table> 

Có cách nào để đạt được điều này mà không cần javascript (tức là hạn chế kéo dài cột với một bảng)?

dưới đây là một bảng về những gì thực sự được trả lại cho một số các thiết lập css khác nhau:

enter image description here

+1

Vâng eh, có một lỗi cú pháp trong CSS của bạn: 'min-width's là không': '. Khắc phục điều đó và thêm 'chiều rộng' ban đầu vào' .a' và '.b' và có vẻ như hoạt động trong Chrome của tôi 29. – Passerby

+0

Chỉnh sửa:' min-width' dường như hoạt động trong Chrome 29, nhưng 'max-width' không: http://jsfiddle.net/4b3RZ/9/ – Passerby

+0

@Passerby có quyền tuyệt đối của bạn về: (phải là một lỗi đánh máy) Tôi đã sửa lỗi này trong câu hỏi. Bất kỳ ý tưởng làm thế nào để làm cho công việc tối đa chiều rộng? –

Trả lời

67

Các bảng hoạt động khác nhau; đôi khi phản trực giác.

Giải pháp là sử dụng width trên các ô trong bảng thay vì max-width.

Mặc dù nó có vẻ giống như trong trường hợp đó các tế bào sẽ không co lại dưới chiều rộng nhất định, chúng sẽ thực sự.
không có giới hạn về c, nếu bạn cho bảng có chiều rộng là 70px, độ rộng của a, b và c sẽ tương ứng là 16, 42 và 12 pixel.
Với chiều rộng bảng là 400 pixel, chúng hoạt động giống như bạn nói bạn mong đợi trong lưới của mình ở trên.
Chỉ khi bạn cố gắng để cho bảng quá nhỏ một kích thước (nhỏ hơn a.min + b.min + nội dung của C) nó sẽ thất bại: sau đó bản thân bảng sẽ rộng hơn quy định.

Tôi đã tạo một đoạn mã dựa trên fiddle của bạn, trong đó tôi đã xóa tất cả đường viền và phần đệm và khoảng cách đường viền, vì vậy bạn có thể đo chiều rộng chính xác hơn.

table { 
 
    width: 70px; 
 
} 
 

 
table, tbody, tr, td { 
 
    margin: 0; 
 
    padding: 0; 
 
    border: 0; 
 
    border-spacing: 0; 
 
} 
 

 
.a, .c { 
 
    background-color: red; 
 
} 
 

 
.b { 
 
    background-color: #F77; 
 
} 
 

 
.a { 
 
    min-width: 10px; 
 
    width: 20px; 
 
    max-width: 20px; 
 
} 
 

 
.b { 
 
    min-width: 40px; 
 
    width: 45px; 
 
    max-width: 45px; 
 
} 
 

 
.c {}
<table> 
 
    <tr> 
 
    <td class="a">A</td> 
 
    <td class="b">B</td> 
 
    <td class="c">C</td> 
 
    </tr> 
 
</table>

+3

Đẹp, hoạt động hoàn hảo! Nó không có ý nghĩa gì cho các tế bào co lại bên dưới 'chiều rộng' được chỉ định nhưng chúng thực hiện! Cảm ơn. –

+3

Lưu ý rằng ở trên sẽ không hoạt động đối với bảng bố cục cố định. – luke

+0

Cảnh sát ngữ pháp: * phản trực giác – Matt

Các vấn đề liên quan