2026-06-28 16:37:10 -03:00
|
|
|
# ShrinkVertically -- keep the board horizontal scrollbar visible
|
2026-06-28 16:24:11 -03:00
|
|
|
|
2026-06-28 17:12:25 -03:00
|
|
|
A small Kanboard plugin focused on the board's horizontal scrollbar. It fixes the
|
|
|
|
|
vertically-collapsed board view so the bottom scrollbar stays on screen, and can
|
|
|
|
|
optionally add a second, mirrored horizontal scrollbar above the columns. Both are
|
|
|
|
|
configurable under "Settings -> Shrink Vertically".
|
2026-06-28 16:24:11 -03:00
|
|
|
|
2026-06-28 16:37:10 -03:00
|
|
|
## The problem
|
2026-06-28 16:24:11 -03:00
|
|
|
|
2026-06-28 16:37:10 -03:00
|
|
|
Kanboard's board gear menu has an "expand vertically / collapse vertically" toggle. When
|
|
|
|
|
collapsed, each column gets a limited height so the horizontal scrollbar sits closer.
|
|
|
|
|
Core implements this with a single rule:
|
2026-06-28 16:24:11 -03:00
|
|
|
|
2026-06-28 16:37:10 -03:00
|
|
|
```css
|
|
|
|
|
.board-task-list-compact { max-height: 90vh; }
|
|
|
|
|
```
|
2026-06-28 16:24:11 -03:00
|
|
|
|
2026-06-28 16:37:10 -03:00
|
|
|
That `90vh` is measured from the top of the viewport and does not account for the page
|
|
|
|
|
header above the board. So even when collapsed, the column plus the header together
|
|
|
|
|
exceed the viewport height and the horizontal scrollbar is pushed below the fold.
|
2026-06-28 16:24:11 -03:00
|
|
|
|
2026-06-28 16:37:10 -03:00
|
|
|
## The fix
|
2026-06-28 16:24:11 -03:00
|
|
|
|
2026-06-28 16:37:10 -03:00
|
|
|
This plugin injects one CSS rule (via the `template:layout:css` hook) that replaces the
|
|
|
|
|
proportional `90vh` with a fixed-pixel budget for the chrome above and below the task
|
|
|
|
|
list:
|
2026-06-28 16:24:11 -03:00
|
|
|
|
2026-06-28 16:37:10 -03:00
|
|
|
```css
|
|
|
|
|
#board td .board-task-list.board-task-list-compact {
|
2026-06-28 17:03:17 -03:00
|
|
|
max-height: calc(100vh - var(--sv-shrink-offset, 240px)) !important;
|
|
|
|
|
min-height: 0 !important;
|
2026-06-28 16:37:10 -03:00
|
|
|
}
|
|
|
|
|
```
|
2026-06-28 16:24:11 -03:00
|
|
|
|
2026-06-28 17:03:17 -03:00
|
|
|
The offset reserves room for the page header, the board column header, the horizontal
|
2026-06-28 16:37:10 -03:00
|
|
|
scrollbar, and a little breathing space. A fixed-pixel budget is more reliable than a
|
2026-06-28 17:03:17 -03:00
|
|
|
proportional value because that chrome is a fixed height regardless of screen size. It
|
|
|
|
|
defaults to `240px` and is configurable (see Settings below).
|
|
|
|
|
|
|
|
|
|
The `min-height: 0` is essential: Kanboard's drag-and-drop sets an inline `min-height` on
|
|
|
|
|
each column equal to its full content height, and in CSS `min-height` beats `max-height`,
|
|
|
|
|
so without this reset the tall columns would never shrink.
|
2026-06-28 16:24:11 -03:00
|
|
|
|
2026-06-28 16:45:55 -03:00
|
|
|
The override only applies while columns are collapsed (when core adds the
|
|
|
|
|
`board-task-list-compact` class). It changes no data and runs no database migration.
|
|
|
|
|
|
|
|
|
|
## Menu labels
|
|
|
|
|
|
|
|
|
|
So it is obvious the collapsed behaviour comes from this plugin and not from core, a
|
|
|
|
|
small script (via `template:layout:js`) appends a `+` to the two gear-menu items, so they
|
|
|
|
|
read "Collapse vertically+" and "Expand vertically+". It only edits the rendered link
|
|
|
|
|
text, so it works in any locale.
|
2026-06-28 16:24:11 -03:00
|
|
|
|
2026-06-28 16:37:10 -03:00
|
|
|
## Requirements
|
|
|
|
|
|
|
|
|
|
- Kanboard >= 1.2.0
|
|
|
|
|
|
|
|
|
|
## Installation
|
|
|
|
|
|
|
|
|
|
Copy this folder into your Kanboard installation as `plugins/ShrinkVertically/`. The
|
|
|
|
|
directory name must be exactly `ShrinkVertically` (Kanboard derives the plugin namespace
|
|
|
|
|
from the folder name). Reload the board; no build step, no configuration.
|
|
|
|
|
|
2026-06-28 17:12:25 -03:00
|
|
|
## Top horizontal scrollbar (optional)
|
|
|
|
|
|
|
|
|
|
Kanboard's board scrolls horizontally inside `#board-container`, so its only horizontal
|
|
|
|
|
scrollbar is at the very bottom of the board -- on a wide board you must scroll all the
|
|
|
|
|
way down to move sideways. Enable "Add a top horizontal scrollbar" in the settings to get
|
|
|
|
|
a second, mirrored scrollbar just above the columns. A small script
|
|
|
|
|
(`Asset/js/top-scrollbar.js`, loaded only when the option is on) inserts a dummy scroll
|
|
|
|
|
strip above `#board-container` and keeps its scroll position in sync with the board both
|
|
|
|
|
ways.
|
|
|
|
|
|
2026-06-28 17:03:17 -03:00
|
|
|
## Settings
|
2026-06-28 16:24:11 -03:00
|
|
|
|
2026-06-28 17:12:25 -03:00
|
|
|
Go to "Settings -> Shrink Vertically":
|
|
|
|
|
|
|
|
|
|
- **Vertical offset in pixels** -- pixels reserved around the collapsed columns. Stored in
|
|
|
|
|
the Kanboard configuration and injected in the page head as the `--sv-shrink-offset` CSS
|
|
|
|
|
variable. Increase it if the scrollbar is still clipped (for example with a taller theme
|
|
|
|
|
header); decrease it to make the collapsed columns taller. Default: 240.
|
|
|
|
|
- **Add a top horizontal scrollbar to the board** -- toggles the mirrored top scrollbar
|
|
|
|
|
described above.
|
2026-06-28 16:24:11 -03:00
|
|
|
|
|
|
|
|
## License
|
|
|
|
|
|
|
|
|
|
AGPL-3.0. See LICENSE.
|