mirror of
https://github.com/frainfreeze/the-monospace-web-pandoc
synced 2025-12-30 02:59:50 -08:00
177 lines
5.2 KiB
Markdown
177 lines
5.2 KiB
Markdown
---
|
|
title: The Monospace Web
|
|
author: Oskar Wickström
|
|
date: August 2024
|
|
lang: en
|
|
toc-title: Contents
|
|
---
|
|
|
|
## Introduction
|
|
|
|
Monospace fonts are dear to many of us.
|
|
Some find them more readable, consistent, and beautiful, than their proportional alternatives.
|
|
Maybe we're just brainwashed from spending years in terminals?
|
|
Or are we hopelessly nostalgic?
|
|
I'm not sure.
|
|
But I like them, and that's why I started experimenting with all-monospace Web.
|
|
|
|
On this page, I use a monospace grid to align text and draw diagrams.
|
|
It's generated from a simple Markdown document (using Pandoc), and the CSS and a tiny bit of Javascript renders it on the grid.
|
|
The page is responsive, shrinking in character-sized steps.
|
|
Standard elements should _just work_, at least that's the goal.
|
|
It's semantic HTML, rendered as if we were back in the 70s.
|
|
|
|
## The Basics
|
|
|
|
Look at this lovely horizontal break:
|
|
|
|
<hr>
|
|
|
|
Or a plain old bulleted list:
|
|
|
|
* Banana
|
|
* Paper boat
|
|
* Cucumber
|
|
* Rocket
|
|
|
|
## Trees
|
|
|
|
It's nice to visualize trees.
|
|
This is a regular unordered list with a _tree_ class:
|
|
|
|
<ul class="tree">
|
|
<li>
|
|
|
|
**/dev/nvme0n1p2**
|
|
|
|
* usr
|
|
* local
|
|
* share
|
|
* libexec
|
|
* include
|
|
* sbin
|
|
* src
|
|
* lib64
|
|
* lib
|
|
* bin
|
|
* games
|
|
* solitaire
|
|
* snake
|
|
* tic-tac-toe
|
|
* media
|
|
* media
|
|
* run
|
|
* tmp
|
|
</li>
|
|
</ul>
|
|
|
|
## Tables
|
|
|
|
We can use regular tables that automatically adjust to the monospace grid.
|
|
They're responsive.
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th class="width-min">Name</th>
|
|
<th class="width-auto">Dimensions</th>
|
|
<th class="width-min">Position</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Boboli Obelisk</td>
|
|
<td>1.41m × 1.41m × 4.87m</td>
|
|
<td>43°45'50.78"N 11°15'3.34"E</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Pyramid of Khafre</td>
|
|
<td>215.25m × 215.25m × 136.4m</td>
|
|
<td>29°58'34"N 31°07'51"E</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
Note that only one column is allowed to grow.
|
|
|
|
## Forms
|
|
|
|
Here are some buttons:
|
|
|
|
<nav>
|
|
<button>Reset</button>
|
|
<button>Save</button>
|
|
</nav>
|
|
|
|
And inputs:
|
|
|
|
<form class="grid">
|
|
<label>First name <input type="text" placeholder="Placeholder..." /></label>
|
|
<label>Last name <input type="text" placeholder="Text goes here..." /></label>
|
|
<label>Age <input type="text" value="30" /></label>
|
|
</form>
|
|
|
|
## ASCII Drawings
|
|
|
|
We can draw in `<pre>` tags using [box-drawing characters](https://en.wikipedia.org/wiki/Box-drawing_characters):
|
|
|
|
```
|
|
╭─────────────────╮
|
|
│ MONOSPACE ROCKS │
|
|
╰─────────────────╯
|
|
```
|
|
|
|
To have it stand out a bit more, we can wrap it in a `<figure>` tag, and why not also add a `<figcaption>`.
|
|
|
|
<figure>
|
|
<pre>
|
|
┌───────┐ ┌───────┐ ┌───────┐
|
|
│Actor 1│ │Actor 2│ │Actor 3│
|
|
└───┬───┘ └───┬───┘ └───┬───┘
|
|
│ │ │
|
|
│ │ msg 1 │
|
|
│ │────────►│
|
|
│ │ │
|
|
│ msg 2 │ │
|
|
│────────►│ │
|
|
┌───┴───┐ ┌───┴───┐ ┌───┴───┐
|
|
│Actor 1│ │Actor 2│ │Actor 3│
|
|
└───────┘ └───────┘ └───────┘</pre>
|
|
<figcaption>Example: Message passing.</figcaption>
|
|
</figure>
|
|
|
|
Let's go wild and draw a chart!
|
|
|
|
<figure><pre>
|
|
Things I Have
|
|
|
|
│ ████ Usable
|
|
15 │
|
|
│ ░░░░ Broken
|
|
│
|
|
12 │ ░
|
|
│ ░
|
|
│ ░ ░
|
|
9 │ ░ ░
|
|
│ ░ ░
|
|
│ ░ ░ ░
|
|
6 │ █ ░ ░ ░
|
|
│ █ ░ ░ ░
|
|
│ █ ░ █ ░
|
|
3 │ █ █ █ ░
|
|
│ █ █ █ ░
|
|
│ █ █ █ ░
|
|
0 └───▀─────────▀─────────▀──────────▀─────────────
|
|
Socks Jeans Shirts USB Drives
|
|
</pre></figure>
|
|
|
|
## Media
|
|
|
|
Media objects are supported, like images and video:
|
|
|
|

|
|
|
|
.webm/11)](https://upload.wikimedia.org/wikipedia/commons/e/e0/The_Center_of_the_Web_%281914%29.webm)
|
|
|
|
They extend to the width of the page, and add appropriate padding in the bottom to maintain the monospace grid.
|