164 lines
3.9 KiB
Markdown
164 lines
3.9 KiB
Markdown
# Custom SCSS Styling
|
|||
|
|
|
||
|
|
This document describes the SCSS-based custom styling system for the markusgraf.ch Hugo site.
|
||
|
|
|
||
|
|
## Overview
|
||
|
|
|
||
|
|
The site uses a hybrid approach for styling:
|
||
|
|
- **Bootstrap 5.3.2** loaded from CDN (core framework)
|
||
|
|
- **Custom SCSS** compiled via Hugo Pipes (overrides and custom styles)
|
||
|
|
|
||
|
|
This approach provides the benefits of Bootstrap's CDN (speed, caching) while allowing complete customization through SCSS.
|
||
|
|
|
||
|
|
## File Structure
|
||
|
|
|
||
|
|
```
|
||
|
|
assets/scss/
|
||
|
|
├── main.scss # Main entry point (imports all partials)
|
||
|
|
├── _variables.scss # Bootstrap variable overrides
|
||
|
|
└── _custom.scss # Custom component styles
|
||
|
|
```
|
||
|
|
|
||
|
|
### main.scss
|
||
|
|
The main entry point that Hugo processes. This file imports all SCSS partials in the correct order.
|
||
|
|
|
||
|
|
### _variables.scss
|
||
|
|
Bootstrap variable overrides for customizing design tokens:
|
||
|
|
- Heading font sizes (h1-h6)
|
||
|
|
- Link colors and hover states
|
||
|
|
- Spacing scale (optional)
|
||
|
|
- Any other Bootstrap variables
|
||
|
|
|
||
|
|
### _custom.scss
|
||
|
|
Custom component styles and utilities that extend Bootstrap or add new styles.
|
||
|
|
|
||
|
|
## How It Works
|
||
|
|
|
||
|
|
### Compilation Process
|
||
|
|
|
||
|
|
1. Hugo reads `assets/scss/main.scss`
|
||
|
|
2. Hugo processes SCSS with `css.Sass` function
|
||
|
|
3. Output is minified (`outputStyle: compressed`)
|
||
|
|
4. CSS is fingerprinted with SHA-384 for cache busting
|
||
|
|
5. Integrity hash is added to the `<link>` tag
|
||
|
|
|
||
|
|
### CSS Load Order
|
||
|
|
|
||
|
|
In `layouts/_default/baseof.html`:
|
||
|
|
|
||
|
|
```html
|
||
|
|
<!-- Bootstrap CDN CSS (base styles) -->
|
||
|
|
<link href="https://cdn.jsdelivr.net/.../bootstrap.min.css" rel="stylesheet">
|
||
|
|
|
||
|
|
<!-- Custom compiled CSS (overrides) -->
|
||
|
|
<link rel="stylesheet" href="/css/main.[fingerprint].css" integrity="sha384-...">
|
||
|
|
```
|
||
|
|
|
||
|
|
This order ensures custom styles cascade over Bootstrap defaults.
|
||
|
|
|
||
|
|
## Customization Guide
|
||
|
|
|
||
|
|
### Changing Heading Sizes
|
||
|
|
|
||
|
|
Edit `assets/scss/_variables.scss`:
|
||
|
|
|
||
|
|
```scss
|
||
|
|
$h1-font-size: 3rem; // Make h1 larger
|
||
|
|
$h2-font-size: 2.25rem; // Make h2 larger
|
||
|
|
```
|
||
|
|
|
||
|
|
### Changing Link Colors
|
||
|
|
|
||
|
|
Edit `assets/scss/_variables.scss`:
|
||
|
|
|
||
|
|
```scss
|
||
|
|
$link-color: #0066cc; // Primary link color
|
||
|
|
$link-hover-color: #0052a3; // Hover state color
|
||
|
|
```
|
||
|
|
|
||
|
|
### Adding Custom Component Styles
|
||
|
|
|
||
|
|
Edit `assets/scss/_custom.scss`:
|
||
|
|
|
||
|
|
```scss
|
||
|
|
.navbar-brand {
|
||
|
|
font-weight: 700;
|
||
|
|
letter-spacing: 0.05em;
|
||
|
|
}
|
||
|
|
|
||
|
|
.card {
|
||
|
|
border-radius: 8px;
|
||
|
|
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Adding New SCSS Partials
|
||
|
|
|
||
|
|
1. Create a new file: `assets/scss/_mypartial.scss`
|
||
|
|
2. Import it in `main.scss`: `@import 'mypartial';`
|
||
|
|
|
||
|
|
## Development Workflow
|
||
|
|
|
||
|
|
### Development Mode
|
||
|
|
|
||
|
|
```bash
|
||
|
|
hugo server
|
||
|
|
```
|
||
|
|
|
||
|
|
- SCSS changes trigger automatic recompilation
|
||
|
|
- Browser live-reloads with updated styles
|
||
|
|
- Source maps are available for debugging
|
||
|
|
|
||
|
|
### Production Build
|
||
|
|
|
||
|
|
```bash
|
||
|
|
hugo build
|
||
|
|
```
|
||
|
|
|
||
|
|
- SCSS is compiled with minification
|
||
|
|
- No source maps are included
|
||
|
|
- CSS is fingerprinted for cache busting
|
||
|
|
|
||
|
|
## Performance
|
||
|
|
|
||
|
|
- Custom CSS file size: ~154 bytes (current)
|
||
|
|
- Minified and compressed
|
||
|
|
- Cached via fingerprinting
|
||
|
|
- Minimal impact on page load
|
||
|
|
|
||
|
|
## Best Practices
|
||
|
|
|
||
|
|
1. **Keep it minimal** - Only override what you need
|
||
|
|
2. **Use SCSS features** - Variables, nesting, mixins when beneficial
|
||
|
|
3. **Organize by concern** - Use partials to separate different types of styles
|
||
|
|
4. **Comment your code** - Explain why specific overrides are needed
|
||
|
|
5. **Test in multiple browsers** - Ensure compatibility
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### SCSS Won't Compile
|
||
|
|
|
||
|
|
Check Hugo version supports `css.Sass` (v0.128.0+):
|
||
|
|
```bash
|
||
|
|
hugo version
|
||
|
|
```
|
||
|
|
|
||
|
|
### Styles Not Applying
|
||
|
|
|
||
|
|
1. Check CSS load order in browser DevTools
|
||
|
|
2. Verify fingerprinted CSS file exists in `public/css/`
|
||
|
|
3. Check for SCSS syntax errors in Hugo output
|
||
|
|
|
||
|
|
### Cache Issues
|
||
|
|
|
||
|
|
The fingerprinting ensures cache busting, but during development you can:
|
||
|
|
```bash
|
||
|
|
hugo server --disableFastRender
|
||
|
|
```
|
||
|
|
|
||
|
|
## References
|
||
|
|
|
||
|
|
- [Hugo Pipes SCSS Processing](https://gohugo.io/hugo-pipes/scss-sass/)
|
||
|
|
- [Bootstrap 5.3 Customization](https://getbootstrap.com/docs/5.3/customize/sass/)
|
||
|
|
- [SCSS Documentation](https://sass-lang.com/documentation)
|