discourse/plugins/footnote/assets/stylesheets/footnotes.scss
Renato Atilio 4025dad5da
FIX: [rich editor] footnotes editor inside list items (#37343)
Fixes the footnote editor positioning inside list items by using a
different approach than absolute/relative to anchor the footnote
position to the ProsMirror editor: `contain: layout` with `position:
fixed`:

> If the position property is absolute or **fixed**, the containing
block may also be formed by the edge of the padding box of the nearest
ancestor element that has any of the following:
> [...]
> - A
[contain](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/contain)
value of **layout**, paint, strict or content (e.g., contain: paint;).

Source:
https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Display/Containing_block#identifying_the_containing_block

## Before
<img width="754" height="305" alt="image"
src="https://github.com/user-attachments/assets/34864dda-4bdc-47b5-976f-bfd5e05e4d8b"
/>

## After
<img width="756" height="311" alt="image"
src="https://github.com/user-attachments/assets/2edad908-8e76-43b0-8862-280470efc6c5"
/>
2026-01-28 11:35:15 -03:00

113 lines
2.3 KiB
SCSS
Vendored

.inline-footnotes {
counter-reset: inline-footnote;
a.expand-footnote {
user-select: none;
display: inline-block;
&::after {
padding: 0 0.125em;
display: inline-block;
content: "[" counter(inline-footnote) "]";
vertical-align: super;
font-size: 0.75rem;
line-height: 1;
counter-increment: inline-footnote;
}
}
.inline-footnote {
display: inline-block;
}
// This is hack to work with lazy-loading, we will trick the browser
// to believe the image is in the DOM and can be loaded
.footnotes-list,
.footnotes-sep {
position: absolute;
// the left/right positioning prevents overflow issues
// with long words causing overflow on small screens
left: 0;
right: 0;
}
.footnotes-sep,
.footnotes-list,
.footnote-ref {
display: none;
}
}
.fk-d-tooltip__content[data-identifier="inline-footnote"] {
overflow-wrap: break-word;
font-size: var(--font-down-1);
.fk-d-tooltip__inner-content {
flex-direction: column;
}
.footnote-backref {
display: none;
}
img {
object-fit: cover;
max-width: 100%;
}
p {
margin: 0;
min-width: 0;
max-width: 100%;
}
}
.ProseMirror {
counter-reset: prosemirror-footnote;
.footnote {
display: inline-block;
&::after {
padding: 0 0.125em;
display: inline-block;
content: "[" counter(prosemirror-footnote) "]";
vertical-align: super;
font-size: 0.75rem;
line-height: 1;
counter-increment: prosemirror-footnote;
}
}
.footnote-tooltip {
cursor: auto;
// Position is fixed to be relative to the .ProseMirror editor
// See https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Display/Containing_block#identifying_the_containing_block
position: fixed;
max-height: 40%;
overflow: auto;
left: 0;
right: 0;
bottom: 0;
margin: 0.5rem;
padding-top: 0.5rem;
background-color: var(--primary-50);
border-radius: var(--d-border-radius);
z-index: z("modal", "tooltip");
&:focus-within {
outline: 1px solid var(--content-border-color);
}
&::before {
top: 0.1rem;
left: 0.25rem;
position: absolute;
content: "[" var(--footnote-counter) "]:";
font-size: 0.75rem;
color: var(--primary-low-mid);
}
}
}