2012-03-08 20 views
9

Tôi có các vấn đề sau khi sử dụng CSS để tạo kiểu cho các thành phần dldt. Tôi thích sử dụng CSS rất cơ bản tương thích với IE6/IE7 và các trình duyệt hiện đại. Tôi đang cố gắng để có được một hiệu ứng, mà với tôi nên được khá đơn giản để đạt được.Tạo kiểu dl và dt bằng CSS để bắt chước bản trình bày dạng bảng giống như

Dưới đây là phiên bản rút gọn của mã nguồn ban đầu tôi đang làm việc với, để cố gắng và làm việc trên chỉ là vấn đề này:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Test</title> 

     <style type="text/css"> 

     .terms dl { 
      float: left; 
      padding-left: 0px; 
     } 

     .terms dt, .terms dd { 
      text-align: center; 
      margin: 0px; 
      float: left; 
     } 

     .terms dt { 

      border: solid blue 1px; 
      clear: left;  
     } 

     .terms dd { 
      border: solid red 1px; 
      margin-right: 40px; 
      margin-left: 40px; 
     } 

     </style> 
    </head> 
    <body> 
     <div class="terms"> 
      <h1>Terms</h1> 
      <dl> 
       <dt>Term 1:</dt> 
       <dd>Very Long definition for this term here</dd> 

       <dt>Term 2:</dt> 
       <dd>Definition for term</dd> 

       <dt>Term 3 with longer term title:</dt> 
       <dd>Definition for term</dd> 

       <dt>Term 4:</dt> 
       <dd>Definition for term</dd> 

       <dt>Term 5:</dt> 
       <dd>Definition for term</dd> 

       <dt>Term 6:</dt> 
       <dd>Definition for term</dd> 
      </dl> 
      <dl> 
       <dt>Term 7:</dt> 
       <dd>Defintion for term</dd> 

       <dt>Term 8:</dt> 
       <dd>Definition for term</dd> 

       <dt>Term 9:</dt> 
       <dd>Definition for term</dd> 

       <dt>Term 10:</dt> 
       <dd>Very Long definition for this term here</dd> 

       <dt>Term 11:</dt> 
       <dd>Definition for term</dd> 

       <dt>Term 12:</dt> 
       <dd>Definition for term</dd> 
      </dl> 
     </div> 
    </body> 
</html> 

Đây là kết quả trực quan. Tôi theo kiểu biên giới màu xanh và đỏ để nó được dễ dàng hơn hình dung:

enter image description here

Mục tiêu của tôi là phải có tất cả các "hộp" màu xanh và màu đỏ để có cùng chiều rộng không có vấn đề gì các thiết lập văn bản có kích thước là . Ví dụ. nếu người dùng có một biểu định kiểu mặc định để làm cho văn bản của họ rất lớn, nó sẽ mở rộng cho phù hợp. Vấn đề này không chỉ phát sinh khi mọi người sử dụng tờ kiểu của riêng họ, nó cũng phát sinh trong IE6 khi mọi người chọn "cỡ chữ" khác với "trung bình" - nó làm cho văn bản lớn hơn, và tôi muốn có thể chứa nó.

Tôi không nghĩ rằng tôi muốn đặt độ rộng cứng trên bất kỳ "hộp" nào và tôi không muốn bất kỳ gói văn bản nào hoặc có các phao nổi rơi ra khỏi phong cách hai cột này .

Tôi có thể chỉnh sửa câu trả lời bằng nhiều hình ảnh và ví dụ hơn nếu tôi không đủ rõ ràng.

Ngoài ra, đây là câu hỏi có liên quan nhưng riêng biệt. Nếu cửa sổ trình duyệt được kích thước lại, với một bảng bạn mong đợi một phần của bảng sẽ không còn hiển thị khi bạn giảm chiều rộng. Với thiết lập này, bạn nhận được một kết quả rất lạ và xấu xí như được thấy bên dưới. Làm thế nào điều này có thể tránh được?

enter image description here

CẬP NHẬT

Dường như không có một giải pháp mà không liên quan đến cho nhân cố định chiều rộng đến các yếu tố (và/hoặc một yếu tố Encapsulating). Ngoài ra, có vẻ như thay đổi kích thước văn bản của IE6 chỉ có thể được giải quyết bằng cách đặt văn bản của bạn thành kích thước pixel và không cho phép chúng kích thước lại.

+0

Tại sao bạn không sử dụng bảng? – zgood

+1

Mục đích ngữ nghĩa, đánh dấu đại diện cho một danh sách các thuật ngữ và định nghĩa; không phải dữ liệu dạng bảng. Tôi muốn tách biệt ngữ nghĩa của việc đánh dấu từ phong cách. Theo hiểu biết của tôi, đó là mục đích của phần tử 'dl' và của CSS. – user17753

+0

Bàn không phải là điều xấu xa, tránh được bằng mọi giá. Chúng tốt để hiển thị, bất ngờ, dữ liệu dạng bảng - và nó trông giống như nó sẽ áp dụng trong trường hợp này. – chris

Trả lời

1

bạn chỉ có thể xác định chiều rộng cố định: XXpx cho mỗi người trong số các yếu tố như thế này

http://jsfiddle.net/XKaKT/1/

+0

Tôi lấy nó, không có cách nào để làm điều này mà không có chiều rộng cố định? – user17753

+0

bất kỳ chiều rộng biến nào có nghĩa là các cột của bạn sẽ không còn xếp hàng theo chiều dọc, vì chúng có thể kéo dài riêng lẻ, nhưng bạn có thể sử dụng độ rộng phần trăm như thế này nếu điều đó làm cho nó dễ sử dụng hơn: http://jsfiddle.net/XKaKT/2/ – Evert

1

Đối với cửa sổ của bạn thay đổi kích thước vấn đề chỉ cần thêm chiều rộng cho ".terms" div:

.terms{ 
    width:1000px; 
} 
+0

Tôi lấy nó, không có cách nào để làm điều này mà không có chiều rộng cố định? – user17753

7

Một danh sách DLđược đánh dấu đúng cách bảng hai cột thực sự khá giống với ngữ nghĩa. Vì vậy, bạn có thể yên tâm sử dụng bảng ở đây (chú ý TH yếu tố với scope thuộc tính):

<table> 
    <tr> 
     <th scope="row">Term 1:</th> 
     <td>Very Long definition for this term here<td> 
    </tr> 
    <tr> 
     <th scope="row">Term 2:</th> 
     <td>Definition for term<td> 
    </tr> 
    <tr> 
     <th scope="row">Term 3 with longer term title:</th> 
     <td>Definition for term<td> 
    </tr> 
    <!-- ... --> 
</table> 

Nếu sử dụng DL được ưa thích, xem xét sử dụng một danh sách có thứ tự với từng hạng mục có chứa một separate DL với chính xác một DT/DD nhóm bên trong.

2

Đã có một vấn đề tương tự và đây là một giải pháp, nhưng nó chủ yếu phụ thuộc vào mỗi cặp DT-DD lắp trên chỉ 1 dòng, vì vậy nó có thể mong manh cho mục đích của bạn:

Chiến lược chung ở đây là bạn muốn DL là một khối nội tuyến và các DT sẽ bị chặn để chúng tự động có cùng chiều rộng. Điều này cũng cho phép bạn căn chỉnh tất cả các DT nếu phù hợp với kiểu dáng của bạn và bạn kiểm soát khoảng cách giữa các phần tử từ DT.

dl { 
    line-height: 2; 
    display: inline-block; 
    position: relative; 
} 

dt { 
    text-align: right; 
    margin-right: 1em; 
} 

Bây giờ bạn cần định vị DD ở bên phải của DT, điều này làm cho điều này trở nên mong manh, vì DD không thể thích nghi tốt với nội dung khác nhau.

dd { 
    position: absolute; 
    left: 100%; 
    margin-top: -2em; /* negate the DL line-height */ 
    white-space: nowrap; /* without this, DDs will be the same length as DTs 
} 

Lưu ý rằng việc đặt giới hạn chiều rộng trên DL sẽ điều khiển DT và DD của bạn có kích thước dựa trên DT.

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