2010-02-28 30 views
5

Tôi thường cần phải liệt kê các mặt hàng với nhiều kích thước hình ảnh ở bên trái và văn bản ở bên phải, như thế này:Làm cách nào để chuyển đổi giải pháp bố cục bảng HTML thành giải pháp floating-div?

alt text http://www.deviantsart.com/upload/7s01l5.png

Đối với 17 năm, tôi đã giải quyết điều này với bảng HTML, như thế này:

<html> 

    <style> 

    * { margin: 0; padding: 0 } 

    body { 
     padding: 20px; 
    } 

    #content { 
     width: 600px; 
     padding: 20px; 
     margin-left: auto; 
     margin-right: auto; 
     background: green; 
    } 

    .item { 
     margin: 0 0 20px 0; 
    } 

    .itemIcon { 
     float:left; 
    } 

    .itemBody { 
     float:right; 
    } 

    .clear { 
     clear: both; 
    } 

    </style> 

<body> 

<div id="content"> 

    <div class="item"> 
    <div class="itemIcon"> 
     <img src="icon.png" alt=""/> 
    </div> 
    <div class="itemBody"> 
     <h1>This is the first item</h1> 
     <p>Aliquid aliquam fabulas duo an, eu delenit intellegebat has, in sit commodo aliquip. Inermis neglegentur vis an, ea mei habeo animal verterem. Cum vivendo intellegam disputando id, usu id dicta harum convenire. Cibo corpora ut pri, sed legere probatus aliquyam no, vidisse suscipiantur eu mea. Modus etiam concludaturque pro an, ut latine quaeque per. Harum ignota mnesarchum pri ad, duo et diam oblique epicurei, pri ne vivendo omnesque epicurei.</p> 
    </div> 
    <br class="clear"/> 
    </div> 

    <div class="item"> 
    <div class="itemIcon"> 
     <img src="bigIcon.png" alt=""/> 
    </div> 
    <div class="itemBody"> 
     <h1>This is the second item</h1> 
     <p>Aliquid aliquam fabulas duo an, eu delenit intellegebat has, in sit commodo aliquip. Inermis neglegentur vis an, ea mei habeo animal verterem. Cum vivendo intellegam disputando id, usu id dicta harum convenire. Cibo corpora ut pri, sed legere probatus aliquyam no, vidisse suscipiantur eu mea. Modus etiam concludaturque pro an, ut latine quaeque per. Harum ignota mnesarchum pri ad, duo et diam oblique epicurei, pri ne vivendo omnesque epicurei.</p> 
    </div>  
    <br class="clear"/> 
    </div> 

    <div class="item"> 
    <div class="itemIcon"> 
     <img src="icon.png" alt=""/> 
    </div> 
    <div class="itemBody"> 
     <h1>This is the first item</h1> 
     <p>Aliquid aliquam fabulas duo an, eu delenit intellegebat has, in sit commodo aliquip. Inermis neglegentur vis an, ea mei habeo animal verterem. Cum vivendo intellegam disputando id, usu id dicta harum convenire. Cibo corpora ut pri, sed legere probatus aliquyam no, vidisse suscipiantur eu mea. Modus etiam concludaturque pro an, ut latine quaeque per. Harum ignota mnesarchum pri ad, duo et diam oblique epicurei, pri ne vivendo omnesque epicurei.</p> 
    </div> 
    <br class="clear"/> 
    </div> 

</div> 

</body> 
</html> 

Mỗi lần tôi đã cố gắng chuyển sang divs nổi, nó có thất bại vì một lý do này hay cách khác, đây là tôi hiện nỗ lực:

alt text http://www.deviantsart.com/upload/tuvquv.png

Tôi phải làm gì để thay đổi để mã này để div này giải pháp trông giống như bảng dung dịch?

<html> 

    <style> 

    * { margin: 0; padding: 0 } 

    body { 
     padding: 20px; 
    } 

    #content { 
     width: 600px; 
     padding: 20px; 
     margin-left: auto; 
     margin-right: auto; 
     background: green; 
    } 

    .item { 
     margin: 0 0 20px 0; 
    } 

    .itemIcon { 
     float:left; 
    } 

    .itemBody { 
     float:right; 
    } 

    .clear { 
     clear: both; 
    } 

    </style> 

<body> 

<div id="content"> 

    <div class="item"> 
    <div class="itemIcon"> 
     <img src="icon.png" alt=""/> 
    </div> 
    <div class="itemBody"> 
     <h1>This is the first item</h1> 
     <p>Aliquid aliquam fabulas duo an, eu delenit intellegebat has, in sit commodo aliquip. Inermis neglegentur vis an, ea mei habeo animal verterem. Cum vivendo intellegam disputando id, usu id dicta harum convenire. Cibo corpora ut pri, sed legere probatus aliquyam no, vidisse suscipiantur eu mea. Modus etiam concludaturque pro an, ut latine quaeque per. Harum ignota mnesarchum pri ad, duo et diam oblique epicurei, pri ne vivendo omnesque epicurei.</p> 
    </div> 
    <br class="clear"/> 
    </div> 

    <div class="item"> 
    <div class="itemIcon"> 
     <img src="bigIcon.png" alt=""/> 
    </div> 
    <div class="itemBody"> 
     <h1>This is the second item</h1> 
     <p>Aliquid aliquam fabulas duo an, eu delenit intellegebat has, in sit commodo aliquip. Inermis neglegentur vis an, ea mei habeo animal verterem. Cum vivendo intellegam disputando id, usu id dicta harum convenire. Cibo corpora ut pri, sed legere probatus aliquyam no, vidisse suscipiantur eu mea. Modus etiam concludaturque pro an, ut latine quaeque per. Harum ignota mnesarchum pri ad, duo et diam oblique epicurei, pri ne vivendo omnesque epicurei.</p> 
    </div>  
    <br class="clear"/> 
    </div> 

    <div class="item"> 
    <div class="itemIcon"> 
     <img src="icon.png" alt=""/> 
    </div> 
    <div class="itemBody"> 
     <h1>This is the first item</h1> 
     <p>Aliquid aliquam fabulas duo an, eu delenit intellegebat has, in sit commodo aliquip. Inermis neglegentur vis an, ea mei habeo animal verterem. Cum vivendo intellegam disputando id, usu id dicta harum convenire. Cibo corpora ut pri, sed legere probatus aliquyam no, vidisse suscipiantur eu mea. Modus etiam concludaturque pro an, ut latine quaeque per. Harum ignota mnesarchum pri ad, duo et diam oblique epicurei, pri ne vivendo omnesque epicurei.</p> 
    </div> 
    <br class="clear"/> 
    </div> 

</div> 

</body> 
</html> 
+0

Nhìn lại để thấy rằng bạn muốn chiều cao của vùng chứa hình ảnh bị đẩy xuống (cao 100% với tràn: ẩn trên đó là cha mẹ) ... không có cách CSS thuần túy để làm điều này (không có hack). Vì tôi không thích hack có lẽ không phải là đánh dấu không phải ngữ nghĩa, tôi xóa câu trả lời của mình: P –

+0

Tôi không biết Timothy, ví dụ của tôi dường như hoạt động, mặc dù phải thừa nhận rằng tôi chỉ xem nó trong IE7 và Firefox. Hạn chế duy nhất đối với giải pháp của tôi là phải đặt padding/margin tùy thuộc vào từng hình ảnh. – Erik

+0

Vậy tại sao chuyển sang div nếu nó hoạt động với các bảng trong 17 năm? Chỉ vì mọi người chế giễu việc sử dụng các bảng để bố trí không có nghĩa là nó sai, tôi nghĩ việc sử dụng div chỉ là "điều" để làm, nhưng nó không có nghĩa nó luôn là giải pháp tốt nhất. – Mottie

Trả lời

2

Đây không phải là khủng khiếp linh hoạt - bạn phải đặt đệm cho mỗi DIV tùy thuộc vào hình ảnh, nhưng đánh dấu rất sạch sẽ của nó khôn ngoan:

<style> 
div.one { 
    padding-left: 210px; 
    overflow: auto; 
} 
div.one img { 
    float: left; 
    margin-left: -210px; 
} 
</style> 


<div class="one"> 
<img src="http://www.pixeloution.com/breakdown.png" width="200" /> 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum blandit orci sed turpis aliquet ac mattis sem t... 
</div> 

Nhìn thấy nó trong hành động tại địa chỉ: http://jsbin.com/iniqu3/2

Lưu ý nếu bạn làm cho màn hình của bạn rất hẹp, văn bản không quấn quanh hình ảnh, theo ví dụ của bạn.

+0

Và bạn có thể ghi đè lên phong cách div.one và div.one img bằng cách cho các lớp div khác nhau và sử dụng thác, nếu các kích thước có thể được biết đến. div.one.big {padding-left: 300px; } div.one.big img {margin-left: -300px} v.v. –

1

Bạn có thể làm cho nó sắp xếp của công việc bằng cách thêm chiều rộng cho <p> trong itemBody (và một số padding để làm cho nó đẹp):

.itemBody p { 
    width:400px; 
    padding-left:20px; 
} 

.itemBody h1 { 
    padding-left:20px; 
} 

Vấn đề với giải pháp này là các cạnh bên phải của các đoạn văn sẽ được căn chỉnh khác nhau tùy thuộc vào kích thước hình ảnh và văn bản vẫn có thể rơi xuống dòng tiếp theo nếu hình ảnh khá rộng. Nếu bạn có thể tự động điều chỉnh kích thước bằng mã phía máy chủ dựa trên kích thước hình ảnh thì điều này sẽ ổn. (Hoặc tôi cho rằng bạn có thể thực hiện thay đổi kích thước trong javascript.)

Tôi thực sự nghĩ rằng đây là vấn đề vẫn được giải quyết tốt nhất với bảng. Bạn nhận được điều chỉnh độ rộng động và mọi thứ vẫn ở trên cùng một dòng, bất kể kích thước hình ảnh và văn bản của bạn là bao nhiêu. Không có hack, không phiền phức, hoạt động trong tất cả các trình duyệt.

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