2008-12-06 15 views
24

Tôi có hai bảng trên một trang mà tôi muốn hiển thị cạnh nhau, sau đó căn giữa chúng trong trang (thực sự nằm trong div khác, nhưng đây là cách đơn giản nhất tôi có thể đưa ra):Hai bảng HTML cạnh nhau, căn giữa trên trang

<style> 
    #outer { text-align: center; } 
    #inner { text-align: left; margin: 0 auto; } 
    .t { float: left; } 
    table { border: 1px solid black; } 
    #clearit { clear: left; } 
</style> 

<div id="outer"> 
    <p>Two tables, side by side, centered together within the page.</p> 

    <div id="inner"> 
    <div class="t"> 
     <table> 
     <tr><th>a</th><th>b</th></tr> 
     <tr><td>1</td><td>2</td></tr> 
     <tr><td>4</td><td>9</td></tr> 
     <tr><td>16</td><td>25</td></tr> 
     </table> 
    </div> 

    <div class="t"> 
     <table> 
     <tr><th>a</th><th>b</th><th>c</th></tr> 
     <tr><td>1</td><td>2</td><td>2</td></tr> 
     <tr><td>3</td><td>5</td><td>15</td></tr> 
     <tr><td>8</td><td>13</td><td>104</td></tr> 
     </table> 
    </div> 

    </div> 
    <div id="clearit">all done.</div> 
</div> 

tôi hiểu rằng nó là cái gì để làm với thực tế là các bảng đang nổi, nhưng tôi đang ở một mất mát như để hiểu những gì tôi đang mất tích. Có rất nhiều trang web mô tả một cái gì đó giống như kỹ thuật tôi trình bày ở đây, nhưng trong mọi trường hợp nó không hoạt động; các bảng bám chặt vào lề trái.

Trả lời

2

Tắt đầu của tôi, bạn có thể thử sử dụng "margin: 0 auto" cho #outer chứ không phải #inner.

Tôi thường thêm màu nền cho các DIV của mình để xem cách chúng được đặt trên chế độ xem. Đó có thể là một cách tốt để chẩn đoán những gì đang xảy ra ở đây.

+0

Cố gắng tự động ở khắp mọi nơi, không có niềm vui. Đã thử các trick màu nền quá (thực sự tôi thích biên giới: 1px màu đen rắn, nhưng tôi digress). Vấn đề là #inner kéo dài toàn bộ chiều rộng và các bảng không được bao phủ bởi nó, vì chúng được thả nổi ... – dland

1

Vấn đề là DIV sẽ căn giữa các bảng của bạn không có chiều rộng được xác định. Theo mặc định, DIV là các phần tử khối và chiếm toàn bộ chiều rộng của bố mẹ - trong trường hợp này là toàn bộ tài liệu (truyền qua #outer DIV), do đó, kiểu ký tự tự động không có hiệu lực.

Để kỹ thuật này hoạt động, bạn chỉ cần đặt độ rộng của div có lề: tự động thành bất kỳ mục nào trừ "tự động" hoặc "kế thừa" (giá trị pixel cố định hoặc phần trăm).

3

Cung cấp cho div bên trong của bạn một chiều rộng.

VÍ DỤ

Thay đổi CSS của bạn:

<style> 
#outer { text-align: center; } 
#inner { text-align: left; margin: 0 auto; } 
.t { float: left; } 
table { border: 1px solid black; } 
#clearit { clear: left; } 
</style> 

Để này:

<style> 
#outer { text-align: center; } 
#inner { text-align: left; margin: 0 auto; width:500px } 
.t { float: left; } 
table { border: 1px solid black; } 
#clearit { clear: left; } 
</style> 
+0

Hmm, tôi hiểu rồi. Vấn đề là các bảng được tạo động. Tôi không thể tinh chỉnh giá trị pixel để làm cho mọi thứ xếp hàng độc đáo. – dland

+0

Nếu đúng như vậy, bạn không thể làm những gì bạn yêu cầu. –

5

Vấn đề là bạn cần phải cung cấp cho #inner một bộ width (bất cứ điều gì nhưng auto hoặc inherit). Thủ thuật margin: 0 auto; chỉ hoạt động nếu phần tử bên trong hẹp hơn phần tử thùng chứa của nó. Nếu không được cấp width, #inner sẽ tự động mở rộng đến toàn bộ chiều rộng #outer, làm cho nội dung của nó bị tuôn ra trái.

18

Nếu là tôi - tôi sẽ làm một cái gì đó như thế này:

<style type="text/css" media="screen"> 
table { border: 1px solid black;float:left;width:148px;} 
#table_container{width:300px;margin:0 auto;} 
</style> 

Với bàn như:

<div id="table_container"> 
    <table> 
    <tr> 
     <th>a</th> 
     <th>b</th> 
    </tr> 
    <tr> 
     <td>1</td> 
     <td>2</td> 
    </tr> 
    <tr> 
     <td>4</td> 
     <td>9</td> 
    </tr> 
    <tr> 
     <td>16</td> 
     <td>25</td> 
    </tr> 
    </table> 
    <table> 
    <tr> 
     <th>a</th> 
     <th>b</th> 
    </tr> 
    <tr> 
     <td>1</td> 
     <td>2</td> 
    </tr> 
    <tr> 
     <td>4</td> 
     <td>9</td> 
    </tr> 
    <tr> 
     <td>16</td> 
     <td>25</td> 
    </tr> 
    </table> 
</div> 
+2

nếu bạn không thể đặt chiều rộng như được đề cập trong nhận xét bên dưới, hãy đặt tràn: ẩn trên vùng chứa để vùng chứa không sụp đổ. –

1
<style> 
#outer { text-align: center; } 
#inner { width:500px; text-align: left; margin: 0 auto; } 
.t { float: left; width:240px; border: 1px solid black;} 
#clearit { clear: both; } 
</style> 
18

Thật không may, tất cả các giải pháp này dựa vào cách xác định một chiều rộng cố định . Vì các bảng được tạo động (các kết quả thống kê được lấy từ một cơ sở dữ liệu), chiều rộng không thể được biết trước.

Các kết quả mong muốn có thể đạt được bằng cách quấn hai bảng trong bảng khác:

<table align="center"><tr><td> 
//code for table on the left 
</td><td> 
//code for table on the right 
</td></tr></table> 

và kết quả là một cặp hoàn hảo làm trung tâm của bảng trả lời trôi chảy đến độ rộng tùy ý và trang (tái) kích thước (và thuộc tính bảng align = "center" có thể được đưa vào div bên ngoài với ô tô lề).

Tôi kết luận rằng có một số bố cục chỉ có thể đạt được với bảng.

+0

những gì tôi sẽ làm sau đó dland sẽ được sử dụng một cái gì đó như jQuery để xác định chiều rộng của bảng và sau đó thêm hai tổng số với nhau để xác định chiều rộng cần thiết cho container. –

13

Tôi nhận ra đây là một câu hỏi cổ xưa, nhưng dù sao đi nữa.

Sau đây sẽ hoạt động trong trình duyệt tuân thủ và IE8 ở chế độ tiêu chuẩn (tức là với bộ tài liệu).

#inner {text-align:center;} 
.t {display:inline-block;} 

Thật không may, thực sự không có cách nào để tinh chỉnh nó hoạt động trong IE6. Đối với IE7, việc thêm zoom: 1 vào div .t (thông qua nhận xét có điều kiện) có thể giúp ích, nhưng tôi không có sẵn IE7 để thử nghiệm vào lúc này.

+0

+1 để đăng câu hỏi cũ! Trong khi chờ đợi, tôi cũng tìm thấy một giải pháp sử dụng display: table-cell, như bạn có thể tưởng tượng thất bại thảm hại trên IE6. Cuối cùng tôi đã ném chiếc khăn và thêm một số tin tặc bình luận IE6 độc ác để phát ra các yếu tố

, ,
cho IE6. Dường như làm việc đủ tốt. – dland

+0

AFAIK, không có phiên bản nào của IE hỗ trợ hiển thị: ô bảng, đó là lý do tại sao tôi đã đi với khối nội tuyến. Btw, tôi chỉ thử nghiệm nó, và tôi đã nhận được các bảng để đi side-by-side trong IE7 bằng cách thêm ".t {display: inline; zoom: 1;}" trong một bình luận có điều kiện. – Martha

0

Tôi thấy rằng tôi có thể giải quyết vấn đề này bằng cách đặt hai mặt bên cạnh một bảng thứ ba ở giữa. Đây là mã

tôi bổ sung thêm hai dòng mã ở phía trên và phía dưới của hai bảng hiện

<style> 
    #outer { text-align: center; } 
    #inner { text-align: left; margin: 0 auto; } 
    .t { float: left; } 
    table { border: 1px solid black; } 
    #clearit { clear: left; } 
</style> 

<div id="outer"> 

    <p>Two tables, side by side, centered together within the page.</p> 

    <div id="inner"> 
    <table style="margin-left: auto; margin-right: auto;"> 
    <td> 
    <div class="t"> 
     <table> 
     <tr><th>a</th><th>b</th></tr> 
     <tr><td>1</td><td>2</td></tr> 
     <tr><td>4</td><td>9</td></tr> 
     <tr><td>16</td><td>25</td></tr> 
     </table> 
    </div> 

    <div class="t"> 
     <table> 
     <tr><th>a</th><th>b</th><th>c</th></tr> 
     <tr><td>1</td><td>2</td><td>2</td></tr> 
     <tr><td>3</td><td>5</td><td>15</td></tr> 
     <tr><td>8</td><td>13</td><td>104</td></tr> 
     </table> 
    </div> 
    </td> 
    </table> 
    </div> 
    <div id="clearit">all done.</div> 
</div>