Add automatic page scaling to fit viewport without scrolling

This commit is contained in:
nearxos
2026-01-09 10:41:57 +02:00
parent cc3adf7e4e
commit 61cf81faa5
2 changed files with 284 additions and 0 deletions

View File

@@ -0,0 +1,266 @@
# Page Scaling Solutions for Chromium Fullscreen
## Problem
When Chromium loads in fullscreen, the page content requires scrolling (scrollbar appears) instead of fitting the viewport.
## Solutions
### Solution 1: Automatic Zoom via Script (Current Implementation) ⭐
The startup script now automatically zooms out the page after it loads using `xdotool`.
**How it works:**
- Waits for Chromium to load
- Sends keyboard commands to zoom out (Ctrl+-)
- Adjusts zoom level to fit content
**Configuration:**
Edit `~/start-chromium.sh` and adjust the zoom-out loop:
```bash
# Change the number of zoom-out commands (currently 3)
for i in {1..3}; do # Increase number for larger pages
xdotool key --window $WINDOW_ID ctrl+minus
sleep 0.5
done
```
**Pros:**
- Works with any page
- No page modification needed
- Easy to adjust
**Cons:**
- Requires xdotool
- May need fine-tuning for different page sizes
---
### Solution 2: Edit the Page Itself (Best Long-term Solution)
If you control the web page at `http://127.0.0.1:8080`, add responsive CSS:
**Add to your HTML `<head>`:**
```html
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
```
**Add responsive CSS:**
```css
/* Make page fit viewport */
html, body {
width: 100vw;
height: 100vh;
overflow: hidden;
margin: 0;
padding: 0;
}
/* Scale content to fit */
.container {
width: 100%;
height: 100%;
transform-origin: top left;
}
/* Use CSS media queries for different screen sizes */
@media (max-width: 1280px) {
.container {
transform: scale(calc(100vw / 1280));
}
}
```
**Pros:**
- Most reliable solution
- Works without external tools
- Better user experience
**Cons:**
- Requires access to edit the page
- May need to redesign layout
---
### Solution 3: JavaScript Injection
Inject JavaScript to auto-scale the page.
**Create a user script:**
```javascript
// Auto-fit page to viewport
(function() {
function autoFit() {
const vw = window.innerWidth;
const vh = window.innerHeight;
const pw = document.body.scrollWidth;
const ph = document.body.scrollHeight;
const zoom = Math.min(vw/pw, vh/ph, 1.0);
if (zoom < 1.0) {
document.body.style.transform = 'scale(' + zoom + ')';
document.body.style.transformOrigin = 'top left';
document.body.style.width = (100/zoom) + '%';
document.body.style.height = (100/zoom) + '%';
document.body.style.overflow = 'hidden';
}
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', autoFit);
} else {
autoFit();
}
window.addEventListener('resize', autoFit);
setTimeout(autoFit, 2000);
})();
```
**To use:**
1. Install a userscript extension (like Tampermonkey)
2. Create a script that runs on `http://127.0.0.1:8080`
3. Paste the JavaScript above
**Pros:**
- Works automatically
- No page modification needed
- Can be fine-tuned
**Cons:**
- Requires browser extension
- May conflict with page JavaScript
---
### Solution 4: Chromium User Stylesheet
Use a custom CSS file to override page styles.
**Location:** `~/.config/chromium/Default/User StyleSheets/Custom.css`
**Content:**
```css
/* Hide scrollbars and scale content */
html, body {
overflow: hidden !important;
width: 100vw !important;
height: 100vh !important;
}
/* Scale body to fit */
body {
transform: scale(0.8) !important; /* Adjust value as needed */
transform-origin: top left !important;
width: 125% !important; /* Inverse of scale */
}
```
**Pros:**
- Simple CSS solution
- No JavaScript needed
**Cons:**
- Fixed scale value (not dynamic)
- May break some layouts
---
### Solution 5: Chromium Zoom Flag
Use Chromium's force-device-scale-factor flag.
**Add to startup script:**
```bash
--force-device-scale-factor=0.8 # Adjust value (0.5-2.0)
```
**Pros:**
- Built-in Chromium feature
- Simple to use
**Cons:**
- Affects entire browser, not just page
- May make UI elements too small
---
## Recommended Approach
### For Immediate Fix (No Page Editing):
**Use Solution 1** (already implemented in script)
- Automatic zoom via xdotool
- Works immediately
- Adjust zoom level in script if needed
### For Long-term Solution:
**Use Solution 2** (Edit the page)
- Add responsive viewport meta tag
- Add responsive CSS
- Best user experience
- No external dependencies
---
## Testing and Adjustment
### Test Current Implementation:
1. Reboot or restart Chromium:
```bash
ssh pi@10.130.60.253 "pkill chromium && sleep 2 && DISPLAY=:0 ~/start-chromium.sh"
```
2. Check if scrollbar is gone
3. Verify content fits viewport
### Adjust Zoom Level:
If content is too small or still scrolling:
**Edit the script:**
```bash
ssh pi@10.130.60.253 "nano ~/start-chromium.sh"
```
**Find this section and adjust:**
```bash
# Increase number for more zoom-out (smaller content)
for i in {1..5}; do # Changed from 3 to 5
xdotool key --window $WINDOW_ID ctrl+minus
sleep 0.5
done
```
**Or decrease for less zoom-out:**
```bash
for i in {1..2}; do # Less zoom-out
xdotool key --window $WINDOW_ID ctrl+minus
sleep 0.5
done
```
---
## Troubleshooting
### Scrollbar Still Appears:
1. Increase zoom-out commands in script
2. Check if page has fixed-width elements
3. Consider editing the page CSS
### Content Too Small:
1. Decrease zoom-out commands
2. Or use zoom-in: `xdotool key --window $WINDOW_ID ctrl+plus`
### Zoom Not Working:
1. Verify xdotool is installed: `which xdotool`
2. Check window ID is found: Add `echo $WINDOW_ID` to script
3. Try manual test: `xdotool key ctrl+minus`
---
## Current Script Location
- **Device**: `~/start-chromium.sh`
- **Local**: `chromium-setup/start-chromium.sh`
The script now includes automatic page scaling via xdotool zoom commands.