summaryrefslogtreecommitdiff
path: root/layouts/_default/_markup/render-image.html
AgeCommit message (Collapse)Author
2025-03-26Fix layout shifts by preserving aspect-ratio at responsive sizesSangeeth Sudheer
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.
2025-03-15Remove `px` from width/height img attributes in render-image hookSangeeth Sudheer
As per the spec, width/height attrs should be non-negative integers but currently, they are being rendered with a `px` suffix. This change removes the suffix which hopefully fixes any outstanding layout shifts. References: - https://html.spec.whatwg.org/multipage/embedded-content-other.html#dimension-attributes
2024-11-17Add width and height attrs for local imagesSangeeth Sudheer
Image render hook now computes width/height of local images and adds them as attributes. This patch also adds relevant CSS changes to prevent stretchy images. The main reason for this change is to avoid content shifts when images load. Without providing width/height, browser doesn't have info to know the aspect ratio to reserve some space until the image loads. With this change, browser knows the intrinsic size and aspect-ratio to reserve space and avoid content shifts in the page. I believe this also fixes an issue I face in Safari where sometimes, an image below the fold wouldn't load and thus have zero height because it has loading="lazy". To avoid images getting stretched and images overflow/filling the entire screen when their intrinsic size is larger than the container size, I've added some CSS. A configurable `max-height` is present which is used for `figure img` elements. This especially helps when you have tall images like mobile screenshots.
2024-10-31Support relative paths in markdown imagesSangeeth Sudheer
Adds code from Hugo's built-in render-image hook and modifies it slightly to support relative image paths in markdown files. Previously, we'd have to spell the absolute path from root of the hugo site or make directories for each individual post which is what Hugo recommend. But this was very inefficient. This change allows us to use editors like Obsidian, VSCode and have them render the images correctly. It also supports Hugo's page bundles for rendering images as a result. Based on the order, I believe page bundles are given priority so that works out. i.e, if you have the following tree: ``` content └── posts ├── _index.md ├── hello.md ├── images │ └── test.png └── test.png ``` You can now include images in `hello.md` in the following ways: ``` ![](test.png) ![](images/test.png) ![](./test.png) ![](./images/test.png) ```
2024-05-23Image tags for sizingFrancesco
2024-05-21MinorFrancesco
2024-04-24Img lazy loadingFrancesco
2024-04-22Theme UpdateFrancesco