When using the CSS properties background-size: cover and background-attachment: fixed on a container element, the background image may be clipped unexpectedly if the element is not the full size of the viewport. This is due to the combination of the two properties, as explained below.
background-attachment: fixed makes the background image behave like a position: fixed element, meaning it is no longer part of the normal flow of the document and remains stationary relative to the viewport.
background-size: cover scales the background image to cover the entire container element. When combined with background-attachment: fixed, this means that the image is scaled to cover the entire viewport, not just the container element.
If the container element is smaller than the viewport, the background image will be cropped to fit the container element vertically. However, it will still be scaled horizontally to cover the full viewport width. This can result in clipping of the image on the left and right sides.
Unfortunately, there is no way to achieve the desired effect (image clipped vertically or horizontally but not both, and centered by the container element) using pure CSS. This is because of the fundamental way that fixed positioning works in CSS.
To achieve the desired effect, you need to use JavaScript to manually update the background-position property relative to the scroll position of the window, simulating fixed positioning while still calculating background-size: cover relative to the container element.
The above is the detailed content of Why is my clipped background image unexpectedly cropped when using `background-size: cover` and `background-attachment: fixed`?. For more information, please follow other related articles on the PHP Chinese website!