2015-05-01 21 views
36

Trên trang chủ của http://www.shopifyexperte.de/ có hai mô-đun hộp flex, một mô-đun dưới "Kundenstimmen" và một trong "Neueste Beiträge ...". Các hộp bên trong được cho là để bọc khi chúng đi dưới 220px và không phát triển trên 30% chiều rộng. Tính năng này hoạt động trong Chrome, FF và Opera mới nhất (tất cả trên Mac), nhưng trong Safari 8.0.5 (Mac) và bất kỳ trình duyệt iOS nào, các hộp không bao giờ tạo thành hàng ngay cả khi có đủ chỗ. Họ luôn luôn quấn, mỗi một trên một hàng của riêng mình.flex-wrap không hoạt động như mong đợi trong Safari

CSS cho container:

.homepage-testimonial-container { 
 
\t display: flex; 
 
\t display: -webkit-flex; 
 
\t -webkit-flex: 1; 
 
\t flex: 1; 
 
\t -webkit-flex-direction: row; 
 
\t flex-direction: row; 
 
\t -webkit-flex-wrap: wrap; 
 
\t flex-wrap: wrap; 
 
\t -webkit-justify-content: space-between; 
 
\t justify-content: space-between; 
 
\t -webkit-align-items: flex-start; 
 
\t align-items: flex-start; 
 
\t margin-top: 1em; 
 
}

Các CSS cho các hộp bên trong container:

.homepage-testimonial { 
 
\t margin-bottom: 1em; 
 
\t min-width: 220px; 
 
\t max-width: 30%; 
 
\t -webkit-flex: 1 1 auto; 
 
\t flex: 1 1 auto; 
 
}

Nếu tôi d isable -webkit-flex-wrap (hiệu quả thiết lập nó để nowrap), tất cả các hộp xếp hàng trong một hàng nhưng cuối cùng tràn container khi cửa sổ trình duyệt được quá hẹp.

Đây có phải là một loại lỗi trong Safari/Webkit hay tôi đang làm điều gì đó sai ở đây?

Trả lời

29

Dường như đây là lỗi trong Safari. Trong một vấn đề riêng biệt, tôi đã thử nghiệm bằng cách sử dụng chiều rộng tối thiểu thay cho auto trong các dòng nơi bạn nói điều gì đó như -webkit-flex: 1 1 auto;.

Câu hỏi này có một số thông tin: https://stackoverflow.com/a/30792851/756329

+0

Lỗi dường như được [đóng cửa chỉ một vài ngày trước] (https://bugs.webkit.org/show_bug.cgi?id=136041), vì vậy chúng ta có thể mong đợi một sửa chữa trong phiên bản tiếp theo của Safari. –

+4

@JoepMeindertsma - nó không quan trọng vì bạn vẫn phải hỗ trợ các phiên bản trình duyệt cũ 2 năm .. – vsync

27

yếu tố Set đứa trẻ như thế này dường như làm việc cho tôi

flex: 1 0 auto; 
+0

Điều này có thể do các cập nhật gần đây đối với Safari cuối cùng đã hoạt động chính xác. –

+0

Vâng, Safari 9 khá nhiều có flexbox làm việc giống như chrome. Nhưng đó không phải là trường hợp với 8. – Dave

+0

'flex: 1;' hoạt động trên iOS 10.3.2, nhưng không phải 10.2.2 – vanduc1102

7

Thiết flex-basis: 20em cũng làm việc, min-width: 20em không.

2

Đây thực sự là lỗi Safari. Các chi tiết được cung cấp tại các xuất sắc flexbugs trang, nhưng trích dẫn nó:

Safari sử dụng min/max tờ khai rộng/chiều cao cho thực sự render kích thước của mặt hàng flex, nhưng nó bỏ qua những giá trị khi tính bao nhiêu các mặt hàng phải nằm trên một dòng của hộp chứa đa dòng . Thay vào đó, nó chỉ đơn giản sử dụng giá trị cơ sở flex của mặt hàng, hoặc chiều rộng nếu cơ sở flex được đặt thành tự động.

Vì vậy, việc sửa chữa/workaround - theo đề nghị của câu trả lời khác ở đây - là để thiết lập flex-basis đến một chiều rộng rõ ràng chứ không phải là auto.

5

Tôi gặp sự cố tương tự trong Safari (9.1.3) với hệ thống lưới Bootstrap 3 (ví dụ: col-md-4) kết hợp với flex. Tôi đã giải quyết nó bằng cách đặt margin: 0 -1px; trên các mục col và flex-wrap: wrap; trên trình bao bọc.

3

Tôi đang sử dụng Safari 11.0.1 và lỗi vẫn tồn tại. Tôi sử dụng Bootstrap 3 kết hợp với màn hình: flex trên các phần tử .row của tôi. Tôi thêm vào sau để css của tôi để nhắm mục tiêu các yếu tố cột. Dường như có một cái gì đó về tỷ lệ phần trăm chiều rộng trong Safari không được vinh danh chính xác.

.row [class*=col-]{ 
    margin:0 -.3px; 
} 
+1

Tôi vừa gặp sự cố chính xác này (Safari 11, Bootstrap 3). Khi tôi sử dụng 'display: flex' và' flex-wrap: wrap' trên một hàng có bốn cột, Safari chỉ hiển thị ba cột mỗi hàng thay vì bốn cột. Đặt lề trái/phải âm như được hiển thị ở trên để sửa lỗi. – daGUY

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