Fixes places inreader where navbar width was not considered (#908)

* Fixes two places where navbar was not considered

When set to static, the navbar consumes space, so `vw` units are not
enough.
On small screens, the `left`+`transform` approach does not work nicely,
so just use standard flex alignment, the container is already a flexbox.

* Change card also consider wide viewports

* Update src/modules/reader/components/viewer/ReaderTransitionPage.tsx

Co-authored-by: schroda <50052685+schroda@users.noreply.github.com>

* Reader: Apply new alignment code also to horizontal scroll mode

---------

Co-authored-by: schroda <50052685+schroda@users.noreply.github.com>
This commit is contained in:
Constantin Piber
2025-03-24 23:23:50 +01:00
committed by GitHub
parent dc88b42191
commit 1fd7624e98
2 changed files with 12 additions and 24 deletions

View File

@@ -140,12 +140,18 @@ const BaseReaderTransitionPage = ({
position: 'relative', position: 'relative',
transform: 'scale(1)', transform: 'scale(1)',
...applyStyles(isContinuousVerticalReadingMode(readingMode), { ...applyStyles(isContinuousVerticalReadingMode(readingMode), {
maxWidth: `calc(100vw - ${scrollbarYSize}px - ${readerNavBarWidth}px)`,
position: 'sticky',
left: 0,
minHeight: `calc(100vh - ${scrollbarXSize}px)`, minHeight: `calc(100vh - ${scrollbarXSize}px)`,
...applyStyles(!isFitWidthPageScaleMode, { alignItems: 'baseline' }), ...applyStyles(!isFitWidthPageScaleMode, { alignItems: 'baseline' }),
}), }),
...applyStyles(readingMode === ReadingMode.CONTINUOUS_HORIZONTAL, { ...applyStyles(readingMode === ReadingMode.CONTINUOUS_HORIZONTAL, {
flexDirection: 'row',
maxHeight: `calc(100vh - ${scrollbarXSize}px)`,
position: 'sticky',
top: 0,
minWidth: `calc(100vw - ${scrollbarYSize}px - ${readerNavBarWidth}px)`, minWidth: `calc(100vw - ${scrollbarYSize}px - ${readerNavBarWidth}px)`,
justifyContent: 'unset',
}), }),
}), }),
}} }}
@@ -153,26 +159,14 @@ const BaseReaderTransitionPage = ({
<Stack <Stack
sx={{ sx={{
gap: 2, gap: 2,
maxWidth: `calc(100vw - ${scrollbarYSize}px)`, maxWidth: (theme) =>
// spacing = added padding left + right
`calc(100vw - ${scrollbarYSize}px - ${readerNavBarWidth}px - ${theme.spacing(2)})`,
maxHeight: `calc(100vh - ${scrollbarXSize}px)`, maxHeight: `calc(100vh - ${scrollbarXSize}px)`,
width: 'max-content', width: 'max-content',
p: 1, p: 1,
...applyStyles(isContinuousReadingMode(readingMode), { ...applyStyles(isContinuousReadingMode(readingMode), {
position: 'sticky', alignSelf: 'center',
...applyStyles(
// on small screens with "fit to with" enabled, "left 50%" does not center the element in the
// viewport which then causes "translate" to move the element mostly outside the viewport with
// only a small part of it being visible
!isFitWidthPageScaleMode && isContinuousVerticalReadingMode(readingMode),
{
left: '50%',
transform: 'translateX(-50%)',
},
),
...applyStyles(readingMode === ReadingMode.CONTINUOUS_HORIZONTAL, {
top: '50%',
transform: 'translateY(-50%)',
}),
}), }),
}} }}
> >

View File

@@ -72,13 +72,7 @@ export const getImagePlaceholderStyling = (
): CSSObject => { ): CSSObject => {
const OVER_9000 = 9000; const OVER_9000 = 9000;
const getMaxWidth = (width: string) => { const getMaxWidth = (width: string) => `calc(${width} - ${widthOffset}px)`;
if (width === '100vw') {
return `calc(${width} - ${widthOffset}px)`;
}
return width;
};
const getDesktopWidth = (width: number, readerWidthValue?: number) => const getDesktopWidth = (width: number, readerWidthValue?: number) =>
getMaxWidth(`${coerceIn(readerWidthValue ?? width, Math.min(width, readerWidthValue ?? OVER_9000), width)}vw`); getMaxWidth(`${coerceIn(readerWidthValue ?? width, Math.min(width, readerWidthValue ?? OVER_9000), width)}vw`);