2008-12-16 55 views
5

Tôi có một dãy các div phải có cùng độ cao, nhưng tôi không biết cách nào chiều cao đó có thể vượt trước thời gian (nội dung xuất phát từ nguồn bên ngoài). Ban đầu tôi đã thử đặt các div trong một div kèm theo và thả chúng ra. Sau đó tôi thiết lập chiều cao của họ là "100%", nhưng điều này không có hiệu quả cảm nhận được. Bằng cách thiết lập chiều cao trên div kèm theo đến một chiều cao cố định, tôi có thể nhận được các div được thả nổi để mở rộng, nhưng chỉ lên đến chiều cao cố định của container. Khi nội dung trong một trong các div vượt quá chiều cao cố định, nó tràn ra; các divs trôi nổi từ chối mở rộng.Tạo một dãy các div có cùng chiều cao bằng cách sử dụng CSS

Tôi đã giải quyết vấn đề về vấn đề này và dường như không có cách nào để thực hiện việc đó bằng cách sử dụng CSS. Vì vậy, bây giờ tôi đang cố gắng sử dụng một sự kết hợp của vị trí tương đối và tuyệt đối thay vì nổi. Đây là CSS:

<style type="text/css"> 
div.container { 
    background: #ccc; 
    position: relative; 
    min-height: 10em; 
} 
div.a { 
    background-color: #aaa; 
    position: absolute; 
    top: 0px; 
    left: 0px; 
    bottom: 0px; 
    width: 40%; 
} 
div.b { 
    background-color: #bbb; 
    position: absolute; 
    top: 0px; 
    left: 41%; 
    bottom: 0px; 
    width: 40%; 
} 
</style> 

Đây là một phiên bản đơn giản của HTML:

<div class="container"> 
    <div class="a">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit.</div> 
    <div class="b">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit.</div> 
    </div> 

này hoạt động, trừ khi bạn thay đổi min-height cho một cái gì đó giống như 5em (demonstranting gì xảy ra khi nội dung vượt quá chiều cao tối thiểu) và bạn có thể thấy rằng trong khi văn bản không bị cắt, các div vẫn từ chối mở rộng. Bây giờ tôi đang thua. Có cách nào để làm điều này bằng cách sử dụng CSS?

+2

* ho *

* ho * ;-) –

Trả lời

2

Làm cho chúng chính xác cùng chiều cao có thể là một điều khó khăn, nhưng nếu chúng chỉ xuất hiện cùng chiều cao, bạn có thể muốn xem kỹ thuật faux columns.

Tôi đã thử một vài phương pháp khác, nhưng đây là cách đáng tin cậy nhất mà tôi đã tìm thấy để nhận được hiệu ứng, ngoài việc sử dụng các bảng tất nhiên.

1

Bạn có thể sử dụng JavaScript, nhưng tất nhiên nó sẽ phá vỡ mà không bật JavaScript. Sau đó, có bảng, nhưng điều này làm hỏng điểm của CSS. Có lẽ seanb's answer có thể hoạt động, đặt một hình nền tạo ra ảo tưởng rằng tất cả các cột đều đi xuống phía dưới. Điều này được gọi là kỹ thuật nền giả giả.

Hoặc ngồi chặt và đợi display: table-cell để được hỗ trợ cho tất cả/hầu hết các trình duyệt.

10

Đây là một trong những khoảnh khắc bạn có thể gặp khó khăn giữa lý tưởng hoặc thực tế. Tôi hiểu rằng không có giá trị ngữ nghĩa nào để đặt dữ liệu không theo bảng trong một bảng nghiêm ngặt vì lý do định dạng nhưng tôi không muốn nhìn thấy bạn cúi xuống phía sau để tạo ra một giải pháp không dạng bảng cho vấn đề này đơn giản chỉ vì lợi ích riêng của nó.

Tôi là người đầu tiên bắn hạ các thiết kế phi ngữ nghĩa, tin tưởng tôi, nhưng đôi khi bạn cần phải đối mặt với thực tế là đánh dấu ngữ nghĩa CSS + không hoạt động cho tất cả các tình huống thiết kế. Tôi không biết nhu cầu về khả năng truy cập của trang web này nhưng tôi khuyên bạn nên xem xét một giải pháp thiết thực hơn cho vấn đề này.

Chúc mừng bạn đã tiếp cận đúng cách này và tìm kiếm cách thích hợp để giải quyết! Thật không may đây là một trong những góc tối của CSS (cùng với định vị thẳng đứng trong một khối) mà chỉ đơn giản là không thể làm mà không có các cột giả, javascript hoặc các ô bảng.

Cho dù bạn chọn, xin vui lòng không tuân thủ một tiêu chuẩn vì mục đích riêng của mình.

+1

Cũng được nói, không chắc ai sẽ bị thương nếu bạn sử dụng bàn ... – seanb

0

Cảm ơn câu trả lời, các bạn. Tôi không nghĩ rằng hình nền sẽ hoạt động vì độ rộng của các cột cũng có thể khác nhau tùy thuộc vào số cột có (người dùng có thể thay đổi nó).Tôi đoán tôi sẽ sử dụng các bảng: (

+0

Bàn! Nếu bạn cảm thấy thực sự xấu về nó trong một thời gian vài năm, bạn có thể chuyển đổi chúng thành divs và sử dụng display: table-cell ... – alex

1

OK, điều bảng hóa ra hơi phức tạp hơn tôi nghĩ là vậy. Hóa ra giải pháp Javascript thực sự là đơn giản nhất (đối với tình huống của tôi), vì . ứng dụng là một ứng dụng AJAX và khuôn khổ sử dụng Prototype.js Tất cả phải mất là một vài dòng JS:

$$('div.container').each(function (element) { 
var longest = 0; 

element.descendants().each(function (child) { 
    if (child.getHeight() > longest) 
    longest = child.getHeight(); 
}); 

element.descendants().each(function (child) { 
    child.style.height = longest + 'px'; 
}); 
}); 

Cảm ơn một lần nữa cho sự giúp đỡ

0

nếu bạn đang tìm kiếm một lựa chọn hoàn toàn css, và. bạn có thể tách riêng nền của khối từ nội dung, sau đó câu trả lời là hai có hai bit mã cho mỗi khối, một cho nội dung, một cho nền. e:

<div id="wrapper"> 
    <div class="content" id='one> 
    <div class="content" id="two> 
    <div class="content" id="three> 
    <div class="background" id="back-one"> 
    <div class="background" id="back-two"> 
    <div class="background" id="back-three"> 
</div> 

Định vị div nội dung bằng cách sử dụng phao. Sau đó định vị các hình nền bằng cách sử dụng vị trí tuyệt đối (và chỉ số z để đặt chúng phía sau)

Điều này hoạt động vì các phao nổi có thể đặt chiều cao và các phần tử được định vị hoàn toàn có thể có chiều cao 100%. Đó là một chút lộn xộn, nhưng thực hiện công việc.

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