2008-08-31 86 views
72

Tôi có một div chứa với chiều rộng cố định và chiều cao, với tràn: ẩn.CSS - Làm cho các div căn chỉnh theo chiều ngang

Tôi muốn một hàng ngang float: div bên trái trong vùng chứa này. Divs được thả nổi bên trái sẽ tự nhiên đẩy vào 'dòng' bên dưới sau khi họ đọc giới hạn bên phải của cha mẹ của họ. Điều này sẽ xảy ra ngay cả khi chiều cao của phụ huynh không được cho phép điều này. Đây là cách này có vẻ:

[sai] [1] - hình ảnh loại bỏ lán hình ảnh đó đã được thay thế bằng một quảng cáo

Làm thế nào tôi muốn nó nhìn:!

[Ngay ] [2] - hình ảnh loại bỏ lán hình ảnh đó đã được thay thế bằng một quảng cáo

Lưu ý: tác dụng tôi muốn có thể đạt được bằng cách sử dụng các yếu tố inline & white-space: không-wrap (đó là cách tôi đã làm nó trong hình ảnh được hiển thị). Điều này, tuy nhiên, không tốt với tôi (vì lý do quá dài để giải thích ở đây), như các div con cần phải được thả nổi yếu tố cấp khối.

+5

Liên kết hình ảnh của bạn dường như đã bị hỏng. Nếu bạn vẫn có bản gốc, vui lòng tải lại chúng lên stack.imgur. Cảm ơn! –

Trả lời

84

Bạn có thể đặt một div bên trong trong vùng chứa đủ rộng để giữ tất cả các div được thả nổi.

#container { 
 
    background-color: red; 
 
    overflow: hidden; 
 
    width: 200px; 
 
} 
 

 
#inner { 
 
    overflow: hidden; 
 
    width: 2000px; 
 
} 
 

 
.child { 
 
    float: left; 
 
    background-color: blue; 
 
    width: 50px; 
 
    height: 50px; 
 
}
<div id="container"> 
 
    <div id="inner"> 
 
    <div class="child"></div> 
 
    <div class="child"></div> 
 
    <div class="child"></div> 
 
    </div> 
 
</div>

+0

làm thế nào tôi có thể làm cho trung tâm div outter? Tôi đã thử thêm align = "center" trên div outter, có vẻ như không hoạt động. – hakunami

+0

Điều này cũng phù hợp với chiều rộng phần trăm. Trong trường hợp của tôi, tôi đang sử dụng div chứa 'width: 200%;' và các phần tử con là 'width: 50%;'. Sau đó tôi có thể sử dụng 'transform: translateX (n%);' trên vùng chứa để mô phỏng hiệu ứng băng chuyền miễn là tôi có một thùng chứa cha với 'overflow: hidden;' – evolross

3

Điều này có vẻ gần với những gì bạn muốn:

#foo { 
 
    background: red; 
 
    max-height: 100px; 
 
    overflow-y: hidden; 
 
} 
 

 
.bar { 
 
    background: blue; 
 
    width: 100px; 
 
    height: 100px; 
 
    float: left; 
 
    margin: 1em; 
 
}
<div id="foo"> 
 
    <div class="bar"></div> 
 
    <div class="bar"></div> 
 
    <div class="bar"></div> 
 
    <div class="bar"></div> 
 
    <div class="bar"></div> 
 
    <div class="bar"></div> 
 
</div>

4

bạn có thể sử dụng clip tài sản:

#container { 
    position: absolute; 
    clip: rect(0px,200px,100px,0px); 
    overflow: hidden; 
    background: red; 
} 

lưu ý các position: absoluteoverflow: hidden cần thiết để có được clip làm việc.

+3

hỗ trợ trình duyệt của clip là gì? – alex

+0

Từ http://www.w3schools.com/cssref/pr_pos_clip.asp: Thuộc tính clip được hỗ trợ trong tất cả các trình duyệt chính. Lưu ý: Giá trị "kế thừa" không được hỗ trợ trong IE7 trở về trước. IE8 yêu cầu một DOCTYPE! IE9 hỗ trợ "kế thừa". – dsomnus

26

style="overflow:hidden" cho mẹ divstyle="float: left" cho tất cả các con divs rất quan trọng để làm cho divs class ngang cho các trình duyệt cũ như IE7 và dưới đây.

Đối với trình duyệt hiện đại, bạn có thể sử dụng style="display: table-cell" cho tất cả trẻ em divs và nó sẽ hiển thị theo chiều ngang đúng cách.

1

Làm nổi chúng bên trái. Trong Chrome, ít nhất, bạn không cần phải có trình bao bọc, id="container", trong ví dụ của LucaM.

2

Float: bên trái, hiển thị: inline-block cả hai đều sẽ không căn chỉnh các phần tử theo chiều ngang nếu chúng vượt quá chiều rộng của vùng chứa.

Điều quan trọng cần lưu ý là các thùng chứa không nên quấn nếu các yếu tố PHẢI hiển thị theo chiều ngang: white-space: nowrap

1

Bây giờ bạn có thể sử dụng css flexbox để gắn kết các div ngang và dọc nếu bạn cần.công thức chung như sau:

parent-div { 
    display:flex; 
    flex-wrap: wrap; 
    justify-content: center ; /* for horizontal aligning of child divs */ 
    align-items : center ; /* for vertical aligning */ 
    } 
child-div { 
    width: /* yoursize for each div */ ; 
} 
Các vấn đề liên quan