2013-08-26 44 views
11

Tôi có HTML sau:CSS chuyển tiếp không hoạt động trên tài sản hàng đầu trong FF

<ul> 
    <li> 
     <a href="#"> 
      <h2>title</h2> 
     </a> 
    </li> 
    <li> 
     <a href="#"> 
      <h2>title</h2> 
     </a> 
    </li> 
    <li> 
     <a href="#"> 
      <h2>title</h2> 
     </a> 
    </li> 
</ul> 

CSS

ul { 
    list-style: none; 
    text-align: center; 
} 
ul li { 
    position: relative; 
    float: right; 
    margin-right: 20px; 
    width: 30%; 
} 
ul li { 
    transition: all 0.3s; 
} 
ul li:hover { 
    top: -10px; 
} 
ul li> a{ 
    color: red; 
} 

Câu hỏi đặt ra là quá trình chuyển đổi không làm việc với MOZ, nó hoạt động trên webkit . Làm thế nào để tôi thực hiện điều này theo một cách trình duyệt chéo?

DEMO

Trả lời

17

Trình duyệt không áp dụng transition trên thuộc tính nếu giá trị ban đầu không được chỉ định trong phần tử. Do đó, việc thêm top: 0px vào ul li sẽ giải quyết vấn đề.

ul { 
 
    list-style: none; 
 
    text-align: center; 
 
} 
 
ul li { 
 
    position: relative; 
 
    float: right; 
 
    margin-right: 20px; 
 
    top: 0px; /* this line was added */ 
 
    width: 30%; 
 
} 
 
ul li { 
 
    transition: all 0.3s; 
 
} 
 
ul li:hover { 
 
    top: -10px; 
 
} 
 
ul li> a { 
 
    color: red; 
 
}
<!-- Library included just to avoid prefixes so that users with older browser can view --> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script> 
 

 
<ul> 
 
    <li> 
 
    <a href="#"> 
 
     <h2>title</h2> 
 
    </a> 
 
    </li> 
 
    <li> 
 
    <a href="#"> 
 
     <h2>title</h2> 
 
    </a> 
 
    </li> 
 
    <li> 
 
    <a href="#"> 
 
     <h2>title</h2> 
 
    </a> 
 
    </li> 
 
</ul>

Lưu ý: Tôi cũng xin đề nghị sử dụng các tùy chọn tương tự (transform) như đã đề cập trong câu trả lời của Mr_Green.

3

Hãy thử điều này:

ul li { 
    /* standard property and other vendor prefixes */ 
    -moz-transition: -moz-transform 0.3s; 
} 
ul li:hover { 
    /* standard property and other vendor prefixes */ 
    -moz-transform: translateY(-10px); 
} 
+0

Tôi đã thử, liều lượng không hoạt động. Tôi đang sử dụng FF btw mới nhất –

+0

@Sam thêm tiền tố nhà cung cấp '-moz-transition' và cũng không xóa thuộc tính css 'transition'. Nếu bạn đã làm như vậy thì bỏ qua thông báo này. –

+0

@Mr_Green có! Mr_green tôi đã cố gắng mà quá .. tôi đã cập nhật các bản demo như wel –

2

Đó chắc chắn không phải là tuyên bố chuyển hoặc bất cứ điều gì khác trong CSS bạn đã viết --- thử thêm opacity:.5 sang trạng thái di chuột và bạn sẽ thấy nó animate tốt.

Vì vậy, vì một số lý do, Firefox không chuyển đổi thuộc tính top. Thành thật mà nói, tôi không biết tại sao. Giải pháp của tôi bây giờ sẽ được sử dụng một CSS transform để di chuyển mục lên 10px thay vì:

ul li:hover { 
    -o-transform: translateY(-10px); 
    -ms-transform: translateY(-10px); 
    -moz-transform: translateY(-10px); 
    -webkit-transform: translateY(-10px); 
    transform: translateY(-10px); 

}

này sinh động thành công trong Firefox như bạn có thể xem tại đây:

http://jsfiddle.net/y7yQQ/7/

+0

Cảm ơn David, tôi sẽ sử dụng margin-top thay vì hàng đầu :) –

+0

@Sam yeah, điểm tốt, điều đó sẽ đạt được cùng với CSS ít hơn rất nhiều! –

4

Tôi không biết tại sao top bất động sản css là hành động kỳ lạ để làm hình ảnh động trong firefox thậm chí nó được liệt kê là animation behaviour property trong css.

Dù sao, sử dụng margin-top thay vì top vẫn hoạt động tốt trong Firefox.

Nhưng tôi muốn đề nghị đi với transform 's 'translateX' và 'translateY' thuộc tính css thay vì sử dụng vị từ lần sau vì nó là hiệu quả. (được đề xuất bởi Paul Irish)

+4

Tôi nghĩ nếu 'top: 0px' được thêm vào mã gốc, nó vẫn hoạt động tốt (không nói là tốt hơn, nhưng nó sẽ hoạt động). Tôi nhớ đọc một câu trả lời trên SO trước đó nói rằng FF không áp dụng chuyển tiếp khi tài sản không được đề cập trong phần tử gốc. – Harry

+2

@Harry yeah đúng vậy. vừa mới nhận ra. :) Đây là [fiddle hoạt động] (http://jsfiddle.net/PRj3V/1/). –

+0

ha haa nice .. :) Cảm ơn mọi người –