style image in figure

This commit is contained in:
Jean-Marie 'Histausse' Mineau 2026-04-16 19:29:10 +02:00
parent 2fd16d24f0
commit 4e34ce03df
Signed by: histausse
GPG key ID: B66AEEDA9B645AD2
8 changed files with 117 additions and 1 deletions

View file

@ -17,3 +17,9 @@
}
#let nav-menu = html.elem.with("nav-menu")
#let home-symbol = html.elem.with("home-symbol")
#let fullscreen-overlay = html.elem.with("fullscreen-overlay")
#let image-magnifier-group(body) = {
// Role 'radiogroup' is needed because of bug in chromium with screenreaders (https://lyra.horse/blog/2025/08/you-dont-need-js/#fn:10)
html.elem("image-magnifier-group", attrs: (role: "radiogroup"), body)
}

90
lib/figures.typ Normal file
View file

@ -0,0 +1,90 @@
#import "custom_html.typ" as chtml
#let fullscreen-counter = state("fullscreen-counter", 0)
#let show-rule-img-fig(img) = context {
let fs-id = fullscreen-counter.get()
```raw-css
figure image-magnifier-group {
img {
max-width: 100%;
max-height: 100%;
height: auto;
width: auto;
}
fullscreen-overlay {
display: none;
top: 0;
bottom: 0;
right: 0;
left: 0;
position: fixed;
background: var(--color-bg-overlay);
justify-content: center;
align-items: center;
flex-direction: column;
img {
width: 100%;
}
}
&:has(.img-magnified-button:checked) {
fullscreen-overlay {
display: flex;
}
}
input {
/* To allow screen reader to still access these. */
opacity: 0;
position: absolute;
pointer-events: none;
}
}
```
chtml.image-magnifier-group({
html.label({
html.input(
type: "radio",
name: "magnify-img-" + str(fs-id),
id: "img-" + str(fs-id) + "-magnified-button",
class: ("img-magnified-button",)
)
img
})
html.label({
html.input(
type: "radio",
name: "magnify-img-" + str(fs-id),
id: "img-" + str(fs-id) + "-not-magnified-button",
class: ("img-not-magnified-button",),
checked: true
)
chtml.fullscreen-overlay()[
#img
]
})
})
fullscreen-counter.update(x => x+1)
}
#let show-rule-figure(fig) = {
show image: show-rule-img-fig
```raw-css
figure {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
```
fig
}

View file

@ -100,6 +100,7 @@
}
}
```
set figure(supplement: none)
html.body({
chtml.site-wrapper({
chtml.site-container({

View file

@ -1,4 +1,5 @@
#import "./custom_html.typ": code-block
#import "./figures.typ": show-rule-figure
#let css-list = state("css-list", ())
@ -24,5 +25,6 @@
it
}
}
show figure: show-rule-figure
body
}

View file

@ -14,6 +14,8 @@
--color-button-shadow: light-dark(#888, #000);
--color-button-focus: light-dark(#000, #FFF);
--color-code-bg: light-dark(rgba(0, 0, 0, 0.05), rgba(255, 255, 255, 0.05))
--color-code-bg: light-dark(rgba(0, 0, 0, 0.05), rgba(255, 255, 255, 0.05));
--color-bg-overlay: light-dark(rgba(255, 255, 255, 0.9), rgba(0, 0, 0, 0.9))
}
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 934 KiB

View file

@ -135,3 +135,18 @@ thead {
[34], [605106], [605098], [26], [18],
table.hline(),
)
#figure(
image(
"./smol-platypus.png",
alt: "A drawing of a blue-ish round-ish platypus with big eyes, holding a laptop. This platypus is quite cute, but I might be biased.",
),
caption: [A Platypus!]
)
#figure(
image(
"./big-platypus.png",
alt: "A drawing of a blue-ish round-ish platypus with big eyes, holding a laptop. This platypus is quite cute, but I might be biased.",
),
caption: [A Big Platypus!]
)

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB