2013-08-02 38 views
39

Trong IE10, mã này không hoạt động chính xác:CSS flexbox không làm việc trong IE10

.flexbox form { 
    display: -webkit-flex; 
    display: -moz-flex; 
    display: -ms-flex; 
    display: -o-flex; 
    display: flex; 
    -webkit-flex-direction: row; 
    -moz-flex-direction: row; 
    -ms-flex-direction: row; 
    -o-flex-direction: row; 
    flex-direction: row; 
} 

.flexbox form input[type=submit] { 
    width: 31px; 
} 

.flexbox form input[type=text] { 
    width: auto; 
    display: -webkit-flex; 
    display: -moz-flex; 
    display: -ms-flex; 
    display: -o-flex; 
    display: flex; 
    -webkit-flex: auto 1; 
    -moz-flex: auto 1; 
    -ms-flex: auto 1; 
    -o-flex: auto 1; 
    flex: auto 1; 
} 

gì nên xảy ra là input[type=submit] nên 31px rộng, với input[type=text] chiếm phần còn lại của không gian có sẵn trong form . Điều gì xảy ra là input[type=text] chỉ mặc định là 263px vì một số lý do.

Tính năng này hoạt động tốt trong Chrome và Firefox.

+0

bản sao có thể có của [Mô hình hộp linh hoạt của IE không hoạt động] (http://stackoverflow.com/questions/16487884/ie-flexible-box-model-not-working) – cimmanon

+1

Không chỉ áp dụng các tiền tố được áp dụng ngẫu nhiên, không hoạt động do triển khai nhiều bản nháp của Flexbox: https://gist.github.com/cimmanon/727c9d558b374d27c5b6 – cimmanon

+0

Hỗ trợ trình duyệt Flexbox: http://stackoverflow.com/a/35137869/3597276 –

Trả lời

33

Chế độ bố cục Flex chưa hoàn toàn được hỗ trợ trong IE. IE10 thực hiện phiên bản "tween" của spec mà không hoàn toàn gần đây, nhưng vẫn hoạt động.

https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Flexible_boxes

bài viết CSS-Tricks này có một số lời khuyên về sử dụng qua trình duyệt của flexbox (bao gồm cả IE): http://css-tricks.com/using-flexbox/

chỉnh sửa: sau khi nghiên cứu hơn một chút, IE10 chế độ bố trí flexbox thực hiện hiện tại để các tháng 3 năm 2012 của W3C dự thảo spec: http://www.w3.org/TR/2012/WD-css3-flexbox-20120322/

dự thảo mới nhất là một năm hoặc lâu hơn gần đây: http://dev.w3.org/csswg/css-flexbox/

+0

Phiên bản cũ hơn được hỗ trợ IE10, hãy xem lưu ý [1] trong liên kết bạn đã đăng. – JacobTheDev

+0

Có, có một số thuộc tính nhà cung cấp flexbox tiền tố '-ms-', nhưng khi tôi hiểu chúng dựa trên một phiên bản lỗi thời của đặc tả flexbox CSS3 (trừ khi thông tin MDN đó chỉ lỗi thời, có thể). – Ennui

+0

Tôi không quan tâm nếu đó là một thông số cũ hơn, nếu nó hoạt động, ít nhất một phần, thì đó là tốt.Tôi đang cố gắng điều chỉnh nội dung từ bài viết CSS Tricks bạn đã đăng, sẽ báo cáo lại nếu nó sửa lỗi. – JacobTheDev

30

Như Ennui đã đề cập, IE 10 hỗ trợ -ms phiên bản tiền tố của Flexbox (IE 11 hỗ trợ nó không cố định). Các lỗi tôi có thể nhìn thấy trong mã của bạn là:

  • Bạn nên có display: -ms-flexbox thay vì display: -ms-flex
  • Tôi nghĩ bạn nên xác định tất cả 3 flex giá trị, như flex: 0 1 auto để tránh nhập nhằng

Vì vậy, trận chung kết mã được cập nhật là ...

.flexbox form { 
    display: -webkit-flex; 
    display: -moz-flex; 
    display: -ms-flexbox; 
    display: -o-flex; 
    display: flex; 

    /* Direction defaults to 'row', so not really necessary to specify */ 
    -webkit-flex-direction: row; 
    -moz-flex-direction: row; 
    -ms-flex-direction: row; 
    -o-flex-direction: row; 
    flex-direction: row; 
} 

.flexbox form input[type=submit] { 
    width: 31px; 
} 

.flexbox form input[type=text] { 
    width: auto; 

    /* Flex should have 3 values which is shorthand for 
     <flex-grow> <flex-shrink> <flex-basis> */ 
    -webkit-flex: 1 1 auto; 
    -moz-flex: 1 1 auto; 
    -ms-flex: 1 1 auto; 
    -o-flex: 1 1 auto; 
    flex: 1 1 auto; 

    /* I don't think you need 'display: flex' on child elements */
    display: -webkit-flex; 
    display: -moz-flex; 
    display: -ms-flex; 
    display: -o-flex; 
    display: flex; 
    /**/ 
} 
+2

Đúng - bạn ** không cần hiển thị: flex trên trẻ em (''). Đó là ** display: flex ** trên phần tử chứa - để chuyển đổi flexbox on - và ** flex:… ** trên các em để chỉ định kích thước, vv .. –

+0

upvoted, chỉ định 3 giá trị làm việc trong trường hợp của tôi. –

7

IE10 đã sử dụng cú pháp cũ. Vì vậy:

display: -ms-flexbox; /* will work on IE10 */ 
display: flex; /* is new syntax, will not work on IE10 */ 

thấy css-tricks.com/snippets/css/a-guide-to-flexbox:

(tweener) có nghĩa là một cú pháp không chính thức lẻ từ [2012] (ví dụ hiển thị: flexbox;)

+0

('bài viết đầu tiên' bình luận) liên kết chỉ câu trả lời được khuyến khích (vì các mục tiêu liên kết có thể biến mất). Nó là tốt để thêm các liên kết nhưng một chút thông tin (lý tưởng là đủ để trả lời câu hỏi) là thực hành tốt hơn. Cảm ơn!. –

+0

mỏ vẫn chưa hoạt động https://jsfiddle.net/1drzxLa5/4/ – user2814546

8

Xin lưu ý rằng mục flex nên display: block; trong IE10.

+1

nó đã giúp tôi rất nhiều – C0ZEN

+0

vì vậy rất lame rằng đây là trường hợp nhưng sửa chữa tuyệt vời ở đây! – AtLeastTheresToast