summaryrefslogtreecommitdiff
path: root/assets/css/main.css
diff options
context:
space:
mode:
authorSangeeth Sudheer <git@sangeeth.dev>2025-03-16 08:37:22 +0530
committerSangeeth Sudheer <git@sangeeth.dev>2025-03-26 07:39:37 +0530
commit8e50f5c421b5b44ad33e325e67efc92c64264e72 (patch)
treeeb704099222fad3702748cc18ee4e4de6d3ced62 /assets/css/main.css
parent361e58e6660b646eb56a538f8840cccabcc01fed (diff)
Fix layout shifts by preserving aspect-ratio at responsive sizes
Uses `aspect-ratio` property to constrain height and width of render image's container to allow responsive resizing while maintaining the original aspect ratio and avoiding layout shifts. Previously, even though `width` and `height` attributes were passed to the `img` element, Chrome (and probably others) weren't reserving space for the image as expected because CSS `width`/`height` were both `auto`. At least one of them needed to be a fixed value in order to maintain aspect ratio. Even with this change, it doesn't seem possible to constrain both width and height on the same element at the same time — only one or the other works. The change introduced makes the `img` element constrain width using `max-width` while the parent element constrain height using `max-height` and `aspect-ratio`. This way, we can get responsive sizing on both axes while obeying the constraints.
Diffstat (limited to 'assets/css/main.css')
-rw-r--r--assets/css/main.css23
1 files changed, 12 insertions, 11 deletions
diff --git a/assets/css/main.css b/assets/css/main.css
index 6e83511..033e3cc 100644
--- a/assets/css/main.css
+++ b/assets/css/main.css
@@ -440,18 +440,19 @@ footer a {
/* images */
-figure>div {
- width: 100%;
- display: flex;
- justify-content: center;
-}
+figure {
+ .img-container {
+ aspect-ratio: var(--w) / var(--h);
+ max-height: var(--figure-img-max-height);
+ width: auto;
+ margin-inline: auto;
+ }
-figure img {
- max-width: 100%;
- max-height: var(--figure-img-max-height);
- width: auto;
- height: auto;
- margin-inline: auto;
+ img {
+ display: block;
+ max-width: 100%;
+ height: auto;
+ }
}
.dark .img-light {