I don't believe there could be a truly universal solution, but I hope I can support as much cases as possible with my createDockedSidebar function.
It takes the following parameters :
parentElement is the one in which the sidebar will be mounted (body by default) ;
element is the sidebar itself (a newly created div by default) ;
size is the width/height of the sidebar (required number) ;
placement is either left, top, right or bottom (left by default) ;
strategy is the approach used to make space for the sidebar :
margin & padding apply either to parentElement
children-margin & children-padding apply either to all children of parentElement
children-transform applies translateX/translateY to all children of parentElement
container moves all children of parentElement another element ;
container is the element in which all children of parentElement are moved when using the container strategy.
children-transform & container are the only strategies that may support top & bottom values for placement.
On Wikipedia, container is the only strategy that will work properly. Luckily, it's a server-side rendered website.
Indeed, client-side rendered websites have higher chances of breaking this mode, as they might move elements back to their original position, especially during navigation. Although MutationObserver might help overcoming this on PWAs, they would probably become unstable.
More tests :
- on StackOverflow, all strategies but
container work, although children-margin is the only one that will handle the header ;
- on MDN, all strategies will work except top/bottom placements ;
- on Google, all strategies except
container will work for left placement and none will work for top/right/bottom placements ;
- on GitHub and Reddit (old), all strategies except top/bottom placements and right placement for
children-transform will work.