Vâng, theo thông số kỹ thuật, có một cách.
Mặc dù tôi đồng ý rằng Graeme Blackwood nên là câu trả lời được chấp nhận, vì thực tế nó giải quyết được vấn đề, cần lưu ý rằng một yếu tố cố định có thể được định vị tương đối với thùng chứa của nó.
Tôi tình cờ nhận thấy rằng khi áp dụng
-webkit-transform: translateZ(0);
với cơ thể, nó tạo ra một đứa trẻ cố định liên quan đến nó (thay vì khung nhìn). Vì vậy, các yếu tố left
và top
thuộc tính cố định của tôi bây giờ liên quan đến container.
Vì vậy, tôi đã thực hiện một số nghiên cứu và thấy rằng vấn đề đã được Eric Meyer đề cập và ngay cả khi nó cảm thấy giống như một "mánh khóe", hóa ra đây là một phần của thông số kỹ thuật:
Đối với các phần tử có bố cục được điều chỉnh bởi mô hình hộp CSS, bất kỳ giá trị nào khác không có giá trị cho biến đổi đều dẫn đến việc tạo cả bối cảnh xếp chồng và khối chứa. Đối tượng hoạt động như một khối chứa cho con cháu định vị cố định.
http://www.w3.org/TR/css3-transforms/
Vì vậy, nếu bạn áp dụng bất kỳ phép chuyển đổi nào cho phần tử cha, nó sẽ trở thành khối chứa.
Nhưng...
Vấn đề là việc triển khai có vẻ có lỗi / sáng tạo, bởi vì các yếu tố cũng ngừng hoạt động như cố định (ngay cả khi bit này dường như không phải là một phần của đặc tả).
Hành vi tương tự sẽ được tìm thấy trong Safari, Chrome và Firefox, nhưng không có trong IE11 (nơi phần tử cố định vẫn sẽ được cố định).
Một điều thú vị (không có tài liệu) khác là khi một phần tử cố định được chứa bên trong một phần tử được chuyển đổi, trong khi các thuộc tính top
và left
thuộc tính của nó bây giờ sẽ liên quan đến vùng chứa, tôn trọng thuộc box-sizing
tính, bối cảnh cuộn của nó sẽ mở rộng ra khỏi đường viền của phần tử, như thể hộp kích thước đã được đặt thành border-box
. Đối với một số sáng tạo ngoài kia, điều này có thể có thể trở thành một đồ chơi :)
KIỂM TRA