2015-07-21 17 views
5

Tôi cần định vị một tiêu đề để được sửa trong phần tử chứa để nó sau khi cuộn. Vấn đề làVị trí được cố định trong phần tử vùng chứa thay vì trình duyệt/khung nhìn

position:fixed 

sửa vị trí cho trình duyệt chứ không phải phụ huynh. Điều này dẫn đến là khi tôi có một vùng chứa có một cuộn ngang cho tràn trong chiều rộng (nội dung rộng hơn vùng chứa), tiêu đề cố định của tôi không có quá trình cuộn tràn như nội dung của bảng.

Xem này fiddle demo

Vì vậy, mục tiêu ở đây là để sửa chữa các vị trí của tiêu đề, nhưng cố định tương ứng với nó chứa mẹ. Trong fiddle này, bạn có thể thấy rằng tôi đã nhận xét ra một khối css:

.container{ 

    /*-webkit-transform: translateZ(0); 
    -moz-transform: translateZ(0); 
    -ms-transform: translateZ(0); 
    transform: translateZ(0);*/ 

    -webkit-transform: none; 
    -moz-transform: none; 
    -ms-transform: none; 
    transform: none; 
} 

Nếu bạn thay thế khối css hiện tại (với transform set không ai sánh kịp) với một với translateZ, tiêu đề sẽ nhận được vị trí tốt bên trong vùng chứa chính, nhưng không còn cố định nữa.

Bất kỳ ai biết cách giải quyết vấn đề này? Giải pháp ưu tiên sẽ là CSS/HTML duy nhất và tránh JS nhưng nếu không có gì khác, thì JS là tất nhiên những gì tôi cần phải đi với!

+6

để sửa chữa một cái gì đó liên quan đến ists phụ huynh, bạn cần 'vị trí: relative' trên phụ huynh và' vị trí: absolute' trên con – atmd

Trả lời

2

CSS không thể tự làm điều này.

Position: fixed hoạt động liên quan đến chế độ xem, không phải nó chứa phần tử.

Tôi đã xem an attempt to solve this problem bằng cách sử dụng thuộc tính CSS3 transform, nhưng (như bạn đã lưu ý trong nhận xét của mình cho câu trả lời đầu tiên) có vẻ như nó không hoạt động.

Tôi hiểu rằng bạn không thể sử dụng bất kỳ thư viện phía máy khách nào nhưng đó là giải pháp duy nhất có sẵn cho kiến ​​thức của tôi. Đối với bạn và những người khác có thể cần một ngày, đây là một giải pháp hoạt động. Nó sử dụng một chút jQuery:

vị một yếu tố bên trong một phần tử với các yếu tố vị trí cố định dọc theo trục x và y (ví dụ: vị trí cố định theo chiều ngang và theo chiều dọc).

http://jsfiddle.net/8086p69z/8/

HTML

<div class="moving-article"> 

    <div class="container"> 

    <header class="fixed-header">FIXED HEADER</header> 

     <ul> 
     <li>SCROLL</li> 
     <li>SCROLL</li> 
     <li>SCROLL</li> 
     </ul>  

    </div> 

</div> 

CSS (phần có liên quan)

.moving-article { 
    height: 150px; 
    width: 75%; 
    overflow-x: scroll;  
} 

.fixed-header { 
    background: rgba(0,0,0,0.5); 
    width: 50%; 
    text-align: center; 
    line-height: 40px; 
    position: absolute; 
    top: 0; 
    left: 0; 
} 

.container{ 
    width: 1000px; 
} 

jQuery

var leftOffset = parseInt($(".fixed-header").css('left')); 
$(window).scroll(function(){ 
    $('.fixed-header').css({ 
     'left': $(this).scrollLeft() + leftOffset 
    }); 
}); 
+0

Cảm ơn bạn một lần nữa @mbnyc, tôi có thể phải suy nghĩ lại các tùy chọn của mình. Tuy nhiên điều này dường như làm việc trong một số trường hợp, nó không hoạt động nếu có một tràn ngang trên cả đầu trang và nội dung. Tôi cần tràn tiêu đề để ẩn trong vùng chứa giống như cách nội dung của nó. –

+0

Dựa trên nhận xét của bạn, tôi không hoàn toàn chắc chắn những gì không hoạt động. Tôi đã điền đầy đủ các thẻ demo với nội dung và các cơ chế cuộn và định vị hoạt động tốt. Xin hãy giải thích. Hoặc có thể sao chép vấn đề trong bản trình diễn và đăng liên kết được cập nhật. –

+0

Giả sử rằng lớp vùng chứa rộng 1000px và bạn có một cuộn quá tải theo chiều ngang. Sau đó, tiêu đề phải chỉ rộng và sử dụng cùng một cuộn ngang cho nội dung trong vùng chứa. Nếu bạn đặt chiều rộng của tiêu đề thành 100% thì tiêu đề sẽ chồng lên vùng chứa và lấp đầy toàn bộ màn hình. Đây là một ví dụ điển hình: http://jsfiddle.net/8086p69z/12/. Bây giờ điểm của tất cả là tiêu đề cần phải là "bên trong" vùng chứa, cùng với phần còn lại của nội dung. Vì vậy, khi bạn cuộn theo chiều ngang để xem nội dung, tiêu đề sẽ theo sau. –

0

đặt vị trí của tiêu đề thành 'tuyệt đối' và đó là vùng chứa mẹ (mà bạn muốn nó tương đối) thành 'tương đối' và đặt nó ở trên cùng của phần tử gốc với 'top: 0'

CSS:

.container { 
    position: relative; 
} 

.child { 
    position: absolute; 
    top: 0; 
} 
+1

Đó mang lại kết quả tương tự như khi sử dụng các biến đổi mặc dù? Tiêu đề không theo dõi khi cuộn. http://jsfiddle.net/8086p69z/3/ –

+0

Có lẽ tôi đã hiểu lầm, bạn có thể giải thích chính xác bạn đang cố đạt được điều gì không? –

+0

Tôi cần tiêu đề để theo dõi phụ huynh có chứa khi cuộn xuống cửa sổ. Khi nội dung của tiêu đề của tôi rộng hơn vùng chứa, nó sẽ cho tôi một cuộn ngang (như trong bản trình diễn) nhưng nó vẫn phải theo sau cuộn xuống –

1

Để giữ một yếu tố cố định trong vòng một phụ huynh không thể được thực hiện với position: fixedposition: fixed mất yếu tố out of the flow và do đó nó không có cha mẹ. Vị trí của nó tương ứng với khung nhìn.

Để đạt được mục tiêu, trong khi giữ mọi thứ đơn giản và hiệu quả, bạn có thể muốn xem xét Tether, "thư viện phía máy khách để tạo các phần tử được định vị hoàn toàn gắn với các phần tử trong trang một cách hiệu quả".

Hy vọng điều này sẽ hữu ích. Chúc may mắn.

+0

Cảm ơn bạn @mbnyc, nhưng tôi không thể sử dụng một lib phía máy khách. Không có đề xuất nào khác? –

+0

Có lẽ bạn có thể hoàn thành nó với thuộc tính 'transform' của CSS3. http://stackoverflow.com/questions/6794000/fixed-position-but-relative-to-container –

+0

Bạn cũng không thể làm việc đó. Mặc dù nó được cố định chính xác vào thùng chứa, nhưng nó không được cố định lên đầu nó khi cuộn. http://jsfiddle.net/8086p69z/5/ –

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