Đây là một giải pháp hoạt động với các nền cố định, nếu bạn có một nền cố định và bạn có một số yếu tố được phủ lên và bạn cần nền blured cho chúng, thì giải pháp này sẽ hoạt động:
Hình ảnh chúng ta có HTML đơn giản này:
<body> <!-- or any wrapper -->
<div class="content">Some Texts</div>
</body>
Nền cố định cho <body>
hoặc phần tử trình bao bọc:
body {
background-image: url(http://placeimg.com/640/360/any);
background-size: cover;
background-repeat: no-repeat;
background-attachment: fixed;
}
Và ví dụ ở đây, chúng tôi có một phần tử được phủ với nền trong suốt màu trắng:
.content {
background-color: rgba(255, 255, 255, 0.3);
position: relative;
}
Bây giờ chúng ta cũng cần sử dụng hình nền chính xác của trình bao bọc cho các phần tử lớp phủ của chúng ta, tôi sử dụng nó như một :before
lớp psuedo:
.content:before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
filter: blur(5px);
background-image: url(http://placeimg.com/640/360/any);
background-size: cover;
background-repeat: no-repeat;
background-attachment: fixed;
}
Vì nền cố định hoạt động theo cùng một cách trong cả phần tử bao bọc và phần tử được phủ, nên chúng tôi có nền ở vị trí cuộn chính xác của phần tử được phủ và chúng tôi chỉ cần làm mờ nó. Đây là một fiddle đang hoạt động, đã được thử nghiệm trong Firefox, Chrome, Opera và Edge: https://jsfiddle.net/0vL2rc4d/
LƯU Ý: Trong firefox có một lỗi làm cho màn hình nhấp nháy khi cuộn và có các hình nền bị mờ cố định. nếu có bất kỳ sửa chữa, hãy cho tôi biết
CSS filter
không được hỗ trợ trên Firefox, bạn không nên sử dụng nó.