2008-10-23 32 views
5

Tôi muốn căn chỉnh các cặp nhãn/giá trị ở giữa bằng cách sử dụng CSS mà không sử dụng vị trí hoặc bảng tuyệt đối (xem ảnh chụp màn hình). Trong ảnh chụp màn hình đó, tôi định vị giá trị (ví dụ: $ 4,500/wk) tuyệt đối và sau đó thả nhãn lên ngay trên nó. Nhưng tuyệt đối không hoạt động tốt trong IE và tôi đã nghe nó không phải là một kỹ thuật tốt.Câu hỏi định vị CSS - Bảng so với tuyệt đối so với DL

Nhưng làm thế nào tôi có thể đạt được hiệu ứng này trong đó các nhãn là tất cả các quyền hợp lý mà không tuyệt đối?

alt text http://www.amherstparents.org/files/shot.jpg

+0

Nhận xét bên dưới có một điểm. Thsi là dữ liệu dạng bảng, tại sao không sử dụng bảng? –

+0

Trong khi đó là sự thật nó có thể được xem như dữ liệu dạng bảng, hiển thị trực quan (2 bộ key => cặp giá trị) làm cho nó khó xử về khả năng truy cập nếu nó là một bảng. Bạn cũng có thể xem nó như là một danh sách các khóa và giá trị xảy ra được hiển thị trong 2 cột ... do đó, việc sử dụng CSS để định vị cũng là một giải pháp. – Rahul

+0

(Tất nhiên, bạn có thể làm cho hai bảng và nổi chúng bên cạnh nhau. Điều đó cũng có tác dụng.) – Rahul

Trả lời

9

Tôi đang bối rối, những gì có tính bảng về dữ liệu đó? Các hồ sơ ở đâu? Hàng của các lĩnh vực khác nhau không thực sự làm cho một bảng theo nghĩa truyền thống. (Cũng không hack nó để có hai hồ sơ mỗi hàng cho rằng vấn đề)

Nếu chúng ta đang giải trí ý tưởng này, thì sự khác biệt giữa nửa bên trái của bảng và bên phải là gì? Tiêu đề cột sẽ là gì nếu có?

Tôi thích đề xuất danh sách định nghĩa, nó chắc chắn phù hợp hơn so với bảng. Và bạn sẽ không cần hai cột nếu tất cả các DT và DD bị trôi nổi: trái và chiều rộng: 25%, và theo thứ tự sau: Chi phí, Vật nuôi, Ngủ, Hút thuốc, v.v ... Vì vậy bạn có thể sử dụng 1 danh sách định nghĩa, vì nó thực sự phải như vậy.

Mặc dù có thể bạn sẽ cần rõ ràng: để lại mọi DT khác chỉ trong trường hợp nội dung của bất kỳ yếu tố nào trong số này kết thúc tốt đẹp trên hai dòng.

<style> 
    dl 
    { 
     float:left; 
     width:100%; 
    } 
    dt, 
    dd 
    { 
     float:left; 
     width:24%; 
     margin:0; 
     padding:0; 
    } 
    dt 
    { 
     text-align:right; 
     padding-right:.33em; 
    } 
    dd 
    { 
     text-align:left; 
    } 
</style> 
<dl> 
    <dt>Cost:</dt> 
    <dd>$4,500/wk</dd> 
    <dt>Pets:</dt> 
    <dd>No</dd> 
    <dt>Sleeps:</dt> 
    <dd>1</dd> 
    <dt>Smoking:</dt> 
    <dd>No</dd> 
</dl> 
+0

Bàn không phải lúc nào cũng cần tiêu đề cột vì đôi khi bạn có thể sử dụng tiêu đề hàng thay thế - bạn chỉ cần nhớ đặt thuộc tính scope = "row | column". –

+0

Cảm ơn, điều đó chứng tỏ việc sử dụng bảng sẽ sai đến mức nào.Là "Chi phí" trong ví dụ, không phải là tiêu đề cho hàng hoặc cột. Chỉ cần * một nửa * hàng! Làm thế nào là có ý nghĩa với một trình đọc màn hình? –

13

Nếu bạn đang hiển thị dữ liệu dạng bảng không có sự xấu hổ trong việc sử dụng một bảng.

+0

Trong trường hợp này, việc đặt văn bản trong bảng thậm chí còn có lợi, vì nó là tiêu đề của bảng, do đó "tiêu đề" của bảng. Các loại khác cũng vậy, nhưng nó đưa nó vào thêm giá trị ngữ nghĩa. – cdeszaq

+0

Đây không phải là dữ liệu dạng bảng. Đó không phải là để nói rằng một bảng nhất thiết là không phù hợp, nhưng đây là một tập các cặp nhãn/giá trị, không phải là một bảng có các hàng và cột. –

3

Sử dụng div chiều rộng cố định với thuộc tính CSS text-align. Đừng quên nổi các div của bạn.

3

Hãy nói rằng bạn đang sử dụng DL, DT và DD:

<dl> 
<dt>Cost:</dt> 
<dd>$4,500/wk</dd> 
<dt>Sleeps:</dt> 
<dd>1</dd> 
</dl> 

Bạn có thể sử dụng CSS xấp xỉ sau (chưa được kiểm tra):

dl { width: 200px; } 
dt { width: 100px; text-align: right; float: left; clear: both; } 
dd { width: 100px; margin: 0; float: left; } 

Edit: Theo Chris Marasti-Georg chỉ ra :

Ngoài ra, nếu bạn muốn 2 cột, sử dụng 2 danh sách định nghĩa và thả nổi

+0

Ngoài ra, nếu bạn muốn 2 cột, hãy sử dụng 2 danh sách định nghĩa và thả nổi chúng. –

+0

Cảm ơn bạn đã gật đầu! * thích * Tôi thích câu trả lời này tốt nhất. –

2

@jon là đúng, nếu dữ liệu dạng bảng, bạn có thể sử dụng bảng. Tuy nhiên, nếu bạn thực sự không muốn sử dụng một bảng, tôi nghĩ rằng đây là những gì bạn muốn:

CSS

.label { 
    min-width: 20%; 
    text-align: right; 
    float: left; 
} 

HTML

<div class="pair"> 
    <div class="label">Cost</div> 
    <div class="value">$4,500/wk</div> 
</div> 
<div class="pair"> 
    <div class="label">Sleeps</div> 
    <div class="value">1</div> 
</div> 
<div class="pair"> 
    <div class="label">Bedrooms</div> 
    <div class="value">9</div> 
</div> 

EDIT @ Chris Marasti-Georg chỉ ra rằng các danh sách định nghĩa sẽ phù hợp hơn ở đây. Tôi đồng ý, nhưng tôi đoán tôi muốn chứng minh rằng điều tương tự có thể dễ dàng thực hiện với bất kỳ phần tử cấp khối nào và không có gì trong danh sách định nghĩa mặc định cần thiết để hoàn thành mục tiêu này.

+0

Tại sao giả mạo danh sách định nghĩa khi một danh sách tồn tại? –

+0

câu hỏi hay. Danh sách định nghĩa sẽ phù hợp hơn ở đây. Tôi sẽ cập nhật để ghi lại điều đó. – pkaeding

+0

Như tôi đã lưu ý trong một câu hỏi tương tự, tôi không đồng ý rằng đây là một danh sách định nghĩa ngữ nghĩa. Đó là một tập các cặp nhãn/giá trị, mà không có phần tử HTML chuẩn. Cả các danh sách định nghĩa, divs, cũng như các bảng đều không phù hợp hơn với ngữ cảnh này. –

0

Cách sử dụng bảng để bố cục bảng và sau đó sử dụng CSS để định vị bảng đó bất cứ nơi nào bạn muốn trên trang của mình?

2

Mở rộng trên bài Rahul của:

CSS

#list { width: 450px; } 
#left { float: left; background: lightgreen; } 
#right { float: right; background: lightblue; } 
dl { width: 225px; } 
dt { width: 100px; text-align: right; float: left; clear: both; } 
dd { width: 100px; margin: 0; float: left; padding-left: 5px; } 

HTML

<div id="list"> 
    <dl id="left"> 
     <dt>Cost:</dt> 
     <dd>$4,500/wk</dd> 
     <dt>Sleeps:</dt> 
     <dd>1</dd> 
     <dt>Bedrooms:</dt> 
     <dd>9</dd> 
     <dt>Baths:</dt> 
     <dd>6</dd> 
    </dl> 
    <dl id="right"> 
     <dt>Pets:</dt> 
     <dd>No</dd> 
     <dt>Smoking:</dt> 
     <dd>No</dd> 
     <dt>Pool:</dt> 
     <dd>No</dd> 
     <dt>Waterfront:</dt> 
     <dd>No</dd> 
    </dl> 
</div> 

Tôi thử nghiệm này dưới FF 3.0.1, IE6 và IE7. Màu nền đơn giản chỉ để giúp bạn hình dung nơi các cột bắt đầu và kết thúc.

+0

Sử dụng cách tiếp cận @ pkaeding, bạn không cần phải phân chia tùy ý này thành hai 'dl'. Chỉ cần thả phần tử '.pair' sang trái và cho nó chiều rộng 50% và bạn sẽ nhận được hiệu ứng hai cột miễn phí. –

0

Lưu ý nhanh về việc triển khai thực hiện điều này bằng cách sử dụng bảng, có một số cấu trúc sẽ làm cho số lượng này có thể truy cập được. Cách đơn giản nhất là sử dụng TH cho các nhãn và TD cho các giá trị. This site có một cuộc thảo luận thú vị và đi sâu hơn vào những thứ như tiêu đề cho các ô, v.v.

0

Tôi luôn coi danh sách định nghĩa như được sử dụng để định nghĩa các mặt hàng, không phải cho cặp khóa/giá trị. (9 không phải là định nghĩa của 'phòng ngủ'). Tuy nhiên, cấu trúc đặc biệt này (danh sách cặp khóa/giá trị) đã gây ra các đối số trong nhiều năm vì không có đánh dấu ngữ nghĩa gốc nào phản ánh đúng.

Tìm DL nếu bạn không phân tích về định nghĩa. Hoặc đi xem bàn. Bảng có cặp khóa/giá trị trong hàng, nếu phạm vi tiêu đề/ô được đặt chính xác, là hoàn toàn hợp lệ. Tôi đã làm điều này gần đây, và nó dường như là đại diện chính xác nhất về ngữ nghĩa.

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