2013-06-14 5 views
10

Tôi có định dạng HTML sau, cách hiệu quả để định vị phần tử đã cho ở trên cùng trên máy tính để bàn và dưới cùng trên thiết bị di động là gì (chiều rộng < 640pixels)? Vì có rất nhiều thiết bị khác nhau, tôi không muốn viết tọa độ vị trí vì nội dung chiều cao của trang thay đổi. Bất kỳ đề xuất?Cách tốt nhất để di chuyển phần tử nằm trên cùng xuống dưới trong thiết kế Responsive

<html> 
<head> 
.. 
</head> 
<body> 
.. 
<p>I am on the top of desktop page, and bottom of mobile page</p> 
... 
</body> 
</html> 

Trả lời

17

Sắp xếp lại các yếu tố có chiều cao không xác định theo kiểu phản hồi tốt nhất với Flexbox. Trong khi hỗ trợ không phải là tuyệt vời cho các trình duyệt máy tính để bàn (IE là yếu tố hạn chế chính ở đây, hỗ trợ bắt đầu với v10), hầu hết các trình duyệt di động làm hỗ trợ nó.

http://cssdeck.com/labs/81csjw7x

@media (max-width: 30em) { 
    .container { 
    display: -webkit-box; 
    display: -moz-box; 
    display: -ms-flexbox; 
    display: -webkit-flex; 
    display: flex; 
    -webkit-box-orient: vertical; 
    -moz-box-orient: vertical; 
    -webkit-flex-direction: column; 
    -ms-flex-direction: column; 
    flex-direction: column; 
    /* optional */ 
    -webkit-box-align: start; 
    -moz-box-align: start; 
    -ms-flex-align: start; 
    -webkit-align-items: flex-start; 
    align-items: flex-start; 
    } 

    .container .first { 
    -webkit-box-ordinal-group: 2; 
    -moz-box-ordinal-group: 2; 
    -ms-flex-order: 1; 
    -webkit-order: 1; 
    order: 1; 
    } 
} 

http://caniuse.com/#feat=flexbox

Hãy nhận biết rằng Flexbox có thể xung đột với các phương pháp bố trí khác, chẳng hạn như các kỹ thuật lưới điện thông thường. Các mục Flex được đặt để nổi có thể gây ra các kết quả không mong muốn trong các trình duyệt Webkit bằng cách sử dụng đặc điểm kỹ thuật năm 2009 (display: -webkit-box).

1

Tôi không biết nếu đó là cách tiếp cận tốt nhất, nhưng bạn có thể tái tạo cùng một nguyên tố mà bạn muốn nó và chơi với các thuộc tính display: none/display: inline-block. Khi nó được xem trên máy tính để bàn, css của bạn sẽ cho nó để hiển thị một trên đầu trang và không phải là một ở phía dưới. Sau đó, khi được xem trên thiết bị di động, nó sẽ không hiển thị trên đầu và hiển thị một ở phía dưới.

Như tôi đã nói, tôi không chắc đây là cách hiệu quả nhất để thực hiện nó, nhưng nó hoạt động. Nếu bất cứ ai khác có một giải pháp tốt hơn, tôi rất muốn nghe nó.

0

Tôi giả sử khi bạn nói "postion" nghĩa là bạn không di chuyển khi bạn cuộn. Trong trường hợp đó bạn có thể sử dụng:

p.className { 
    position: fixed; 
    bottom: 0; // for mobile devices 
    top: 0; // for desktops 
} 

đâu p nguyên tố được một thuộc tính lớp như thế này:

<p class="className">I am on the...</p> 

đáy & đầu sẽ không tồn tại cùng một lúc bạn sẽ cần phải tải một liên quan dựa trên thiết bị. Đối với máy tính để bàn, bạn cũng sẽ cần phải bù đắp nội dung của mình với chiều cao của div sao cho nó không bị ẩn theo div cố định

4

Better tương thích hơn flexbox có thể đạt được với display: table-footer-group (IE8 +)
Hiệu ứng đảo ngược: để di chuyển một yếu tố cao hơn nó là trong mã HTML, bạn có thể thử table-captiontable-header-group.

Không hoạt động với các thành phần tự thay thế như img hoặc input, ít nhất trên Chrome (và điều đó khá bình thường) nhưng tốt với div chẳng hạn.

CHỈNH SỬA: đó là năm 2016 nên Flexbox (và Autoprefixer) tất cả mọi thứ \ o/