2011-10-06 77 views
34

tôi có một div cha, có thể thay đổi kích thước của nó, tùy thuộc vào không gian có sẵn. Trong div đó, tôi có các div nổi. Bây giờ, tôi muốn có khoảng cách giữa các div, nhưng không có không gian để div cha mẹ (xem bản vẽ).Làm cách nào để đặt khoảng cách giữa các div động?

enter image description here

Có cách nào để làm điều này với CSS không?

Cảm ơn bạn

Trả lời

31

Tôi tìm thấy một giải pháp, trong đó ít nhất giúp trong hoàn cảnh của tôi, thì có lẽ nó không phù hợp với các tình huống khác:

tôi cung cấp cho tất cả các con xanh của tôi divs một biên độ hoàn chỉnh:

margin: 10px; 

Và đối với xung quanh div mẹ vàng tôi đặt một biên độ tiêu cực:

margin: -10px; 

tôi cũng đã phải loại bỏ bất kỳ chiều rộng rõ ràng hoặc chiều cao thiết lập cho các div cha mẹ màu vàng, nếu không nó đã làm n ot làm việc. Bằng cách này, về mặt tuyệt đối, các div con được căn chỉnh chính xác, mặc dù div màu vàng cha mẹ rõ ràng được đặt ra, trong trường hợp của tôi là OK, bởi vì nó sẽ không được hiển thị.

+0

Chỉ có một nhược điểm đối với phương pháp này: nếu div cha của bạn nằm ngang với mặt bên phải của trang (hoặc trong phạm vi 10px của nó), 10px lề âm sẽ chồng lên cạnh của cửa sổ, mở rộng trang và gây ra thanh cuộn ngang. Đây có thể là vấn đề với thiết kế đáp ứng, nơi bạn cần bắt đầu xử lý với chiều rộng của chế độ xem đôi khi có chiều rộng là 320px. – thomasrutter

+0

Lưu ý: điều đó nói rằng, tôi chắc chắn không tìm được giải pháp tốt hơn. – thomasrutter

+0

Vâng, bạn nói đúng. Như tôi đã nói, nó chắc chắn không áp dụng được trong mọi tình huống. – ghost23

6

Thêm margin để div style của bạn

margin:0 10px 10px 0; 

http://www.w3schools.com/css/css_margin.asp

+1

nhưng điều đó cũng đặt lề ở phía dưới cùng, có nghĩa là khoảng cách giữa các div màu xanh lục dưới và đường viền dưới cùng của div màu vàng. Không muốn điều đó. – ghost23

+0

Xin lỗi. Tôi đã đi theo văn bản của bạn và không tăng gấp đôi kiểm tra sơ đồ của bạn. Tôi không nghĩ rằng có một giải pháp CSS tinh khiết cho điều này - chắc chắn không phải là một trình duyệt chéo tốt nhất. Tôi sẽ sử dụng JavaSCript để tìm ra div nào nằm trên dòng thứ hai, gán một lớp cho chúng và cho lớp đó 'margin-bottom: 0'. Tôi không nghĩ rằng bạn có thể nhận được tốt hơn nhiều. – Jeff

+0

điều này sẽ thêm phần dưới của lề vào tất cả div và tạo không gian với div chính không bắt buộc được đề cập ở đây. – punit

0

Há chẳng phải chỉ là một trường hợp áp dụng một lớp phù hợp với từng div?

Ví dụ:

.firstRowDiv { margin:0px 10px 10px 0px; } 
.secondRowDiv { margin:0px 10px 0px 0px; } 

này phụ thuộc vào nếu bạn biết trước đó div để áp dụng mà lớp.

+1

hi, vâng, tốt, như tôi đã cố gắng để nói, các div đang trôi nổi và div phụ huynh có thể thay đổi kích thước của nó, vì vậy tôi không thể biết, nơi mà mỗi div sẽ được. – ghost23

12

Xin lỗi vì đã trả lời một bài đăng cũ, nhưng bạn có thể làm như sau:

Giả sử div chứa của bạn có lớp "vàng".

.yellow div { 
    // Apply margin to every child in this container 
    margin: 10px; 
} 

.yellow div:first-child, .yellow div:nth-child(3n+1) { 
    // Remove the margin on the left side on the very first and then every fourth element (for example) 
    margin-left: 0; 
} 

.yellow div:last-child { 
    // Remove the right side margin on the last element 
    margin-right: 0; 
} 

Số 3n + 1 bằng mọi phần tử thứ tư outputted và rõ ràng sẽ chỉ làm việc nếu bạn biết có bao nhiêu sẽ được hiển thị trong một hàng, nhưng nó phải minh họa ví dụ. More details regarding nth-child here.

Lưu ý: Đối với: con đầu tiên làm việc trong IE8 trở về trước, phải khai báo <!DOCTYPE>.

Lưu ý2: Bộ chọn: n-child() được hỗ trợ trong tất cả các trình duyệt chính, ngoại trừ IE8 trở về trước.

+1

Xin chào, cảm ơn câu trả lời, nhưng như tôi đã nói trong câu hỏi của mình, thùng chứa có thể thay đổi kích thước của nó, vì vậy có thể có chỗ cho hơn ba div trong một hàng. – ghost23

2

Tôi đã trễ bữa tiệc nhưng ... Tôi đã có tình huống tương tự xuất hiện và tôi đã phát hiện padding-right (và cuối cùng, trên cùng, bên trái cũng vậy). Từ cách tôi hiểu định nghĩa của nó, nó đặt một khu vực đệm bên trong bên trong div do đó không cần phải thêm một lề âm trên phụ huynh như bạn đã làm với một lề.

padding-right: 10px; 

Điều này đã giúp tôi!

+1

Vì phần đệm này nằm trong div, nó sẽ có màu nền của div. Trong trường hợp này, nó sẽ là 10px màu xanh lá cây ở cạnh phải của div màu xanh lục. Ví dụ, nếu div màu xanh lá cây chứa văn bản, nó sẽ đảm bảo không có văn bản trong đó 10px - nhưng nó sẽ không làm cho khu vực đó màu vàng. Do đó không hữu ích trong tình huống của OP. Nhưng tốt cho mọi người biết. – ToolmakerSteve

0

Câu trả lời cuối cùng của litte.

Nếu bạn muốn sử dụng lưới như thế này, bạn nên xem Bootstrap, Cài đặt tương đối dễ dàng và cung cấp cho bạn chính xác những gì bạn đang tìm kiếm, tất cả được bao bọc trong html/css đẹp và đơn giản hoạt động dễ dàng để làm cho trang web đáp ứng.

+0

Đưa ra một ví dụ! Chỉ cần "sử dụng Bootstrap" không giúp tôi chút nào. Trên thực tế tôi * đang * sử dụng Bootstrap và có câu hỏi này. –

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