mirror of
https://git.sr.ht/~seirdy/seirdy.one
synced 2024-11-10 00:12:09 +00:00
247 lines
7 KiB
CSS
247 lines
7 KiB
CSS
/* CSS that adds the bare minimum for a simple layout.
|
|
* Nothing here exists purely for aesthetics except the unstyled-list;
|
|
* everything else addresses a specific a11y, compatibility, or critical
|
|
* usability need.
|
|
* I also don't define any non-semantic classes besides unstyled-list.
|
|
* The the other classnames referenced here are from microformats2. */
|
|
|
|
/* Start with browser defaults: default fonts, non-dark-mode colors, etc
|
|
* Only change things to solve a specific a11y or significant usability
|
|
* need. One exception: cosmetic improvement for unstyled-list */
|
|
|
|
html {
|
|
/* Mobile screens benefit from greater line-spacing so links are
|
|
* further apart. Dyslexic users prefer the spacing too.
|
|
* <100dpi screens: sans-serif is better. Why did browsers settle
|
|
* on serif being the default?? */
|
|
font: 100%/1.5 sans-serif;
|
|
|
|
/* Aligning to the center with space on both sides prevents accidental
|
|
* link activation on mobile devices. */
|
|
margin: auto;
|
|
}
|
|
|
|
/* WCAG recommends a max line width. Not everyone can resize the
|
|
* viewport.
|
|
* This should not take effect on printouts, to save paper. */
|
|
@media screen {
|
|
/* 45em is the lowest reasonable width for titles, nav, footers, etc */
|
|
html {
|
|
max-width: 45em;
|
|
padding: 0 2%;
|
|
|
|
/* Default font sizes are one-size-fits-all; they're optimized for a
|
|
* wide variety of complex pages. For single-column websites like
|
|
* mine, it's safe to bump it up ever so slightly.
|
|
* Only do this on screen, since printouts already improve legibility
|
|
* and cost paper + ink. */
|
|
font-size: 106%;
|
|
}
|
|
|
|
/* 45em is too wide for long body text. */
|
|
.e-content {
|
|
margin: auto;
|
|
max-width: 38em;
|
|
}
|
|
}
|
|
|
|
/* narrow screens: reduce margin for blockquotes a lot, using
|
|
* a thick left-side border instead. */
|
|
blockquote {
|
|
border-left: 4px solid;
|
|
margin: 0;
|
|
padding-left: 0.8em;
|
|
}
|
|
|
|
/* narrow screens: reduce list indentation */
|
|
dd,
|
|
ol,
|
|
ul {
|
|
margin: .5em 0 0 0;
|
|
padding-left: 1.5em;
|
|
}
|
|
|
|
/* Narrow screens: allow hyphenating titles
|
|
* I can't add soft hyphens to these. */
|
|
h1 {
|
|
hyphens: auto;
|
|
}
|
|
|
|
/* Very narrow screens: full hyphenation */
|
|
@media (max-width: 11em) {
|
|
article,
|
|
h2,
|
|
h3 {
|
|
hyphens: auto
|
|
}
|
|
}
|
|
|
|
/* single-line nav on widescreen and print.
|
|
* Single-line nav on print saves almost half a page. */
|
|
@media print, (min-width: 32em) {
|
|
header nav li,
|
|
footer nav li {
|
|
display: inline;
|
|
|
|
/* inline-end doesn't work in netsurf. -right should stil make sense
|
|
* in RTL machine translation, it'll just look a bit indented. */
|
|
padding-right: 0.5em;
|
|
}
|
|
}
|
|
|
|
/* <kbd> should be distinguished from <code> and surrounding text
|
|
* in a way beyond font-face; at least two visual distinctions needed */
|
|
kbd {
|
|
font-weight: bold;
|
|
}
|
|
|
|
/* narrow screens: remove unused figure margins */
|
|
|
|
figure {
|
|
margin: 1em 0;
|
|
}
|
|
|
|
/* figcaptions should be distinct from surrounding paragraphs tho */
|
|
figure:not([itemtype]) figcaption {
|
|
margin: 0 10%;
|
|
}
|
|
|
|
/* Mobile optimization: nav links are tappable with fat fingers */
|
|
nav li,
|
|
.unstyled-list li {
|
|
margin-bottom: 0.5em;
|
|
}
|
|
|
|
/* Lists without bullets: navlinks, posts lists, webmentions.
|
|
* Those three are lists whose items are already easily distinguishable,
|
|
* rendering bullet points as unnecessary extra visual noise. Pretty
|
|
* much the only purely-aesthetic change in this CSS file. */
|
|
.unstyled-list {
|
|
padding: 0;
|
|
}
|
|
|
|
.unstyled-list li {
|
|
list-style-type: none;
|
|
}
|
|
|
|
/* browsers make monospace small and unreadable for some dumb legacy
|
|
* reason and this somehow fixes that without overriding the user's
|
|
* font size preferences. */
|
|
code,
|
|
kbd,
|
|
samp {
|
|
font-family: monospace, monospace;
|
|
}
|
|
|
|
/* Narrow screens: long words can cause content to flow out of the
|
|
* viewport, triggering horizontal scrolling. Allow breaking words in
|
|
* content I don't control (comments). For content I do control, I just
|
|
* add soft hyphens to the HTML. */
|
|
.u-comment,
|
|
:not(pre) > code {
|
|
overflow-wrap: break-word;
|
|
|
|
/* borders shouldn't touch text */
|
|
padding: 0 0.1em;
|
|
}
|
|
|
|
/* Narrow screens: allow horizontal scroll in a pre block. */
|
|
pre {
|
|
overflow: auto;
|
|
padding: 0.5em;
|
|
}
|
|
|
|
/* Distinguish images from the background in case their color is
|
|
* too similar to the page background color. Also put a border around
|
|
* <pre> and <code> to distinguish them in ways besides font-family. The
|
|
* use of borders in place of background colors for distinguishing
|
|
* elements is an officially documented WCAG technique. */
|
|
img,
|
|
pre,
|
|
:not(pre) > code {
|
|
border: 1px solid;
|
|
}
|
|
|
|
/* A black border is too harsh. */
|
|
:not(pre) > code {
|
|
border-color: #aaa;
|
|
}
|
|
|
|
/* center images that aren't my indieweb icon; same justification as
|
|
* for centering the body contents. Also makes images easier to see
|
|
* for people holding a device with one hand. */
|
|
img:not(.u-photo) {
|
|
display: block;
|
|
height: auto;
|
|
margin: auto;
|
|
max-width: 100%;
|
|
}
|
|
|
|
/* WCAG Technique C25: use borders to separate sections.
|
|
* Also use "content-visibility: auto" to improve performance by
|
|
* reducing the number of DOM nodes rendered at once. */
|
|
footer,
|
|
section[role="doc-endnotes"] {
|
|
border-top: 1px solid;
|
|
content-visibility: auto;
|
|
}
|
|
|
|
/* Some browser focus indicators are inaccessible; override them with
|
|
* something more visible. See WCAG 2.x SC 2.4.12. I also tried to
|
|
* match browser behavior; mainstream browsers use :focus-visible
|
|
* instead of focus but older/simpler browsers only support :focus.
|
|
* I borrowed these directives from
|
|
* https://www.tempertemper.net/blog/refining-focus-styles-with-focus-visible
|
|
* */
|
|
|
|
/* For browsers that don't support :focus-visible */
|
|
a:focus,
|
|
[tabindex]:focus {
|
|
outline: 3px solid;
|
|
}
|
|
|
|
/* Remove :focus styling for browsers that do support :focus-visible */
|
|
@supports selector(:focus-visible) {
|
|
a:focus:not(:focus-visible),
|
|
[tabindex]:focus:not(:focus-visible) {
|
|
outline: none;
|
|
}
|
|
}
|
|
|
|
/* Add focus styling back in browsers that do support :focus-visible */
|
|
:focus-visible {
|
|
outline: 3px solid;
|
|
}
|
|
|
|
/* Skip link is hidden until focused.
|
|
* Needs background color so it can appear over other elements on narrow
|
|
* screens. If we set a background color, we must also set a foreground
|
|
* color. System colors like Canvas and LinkText aren't supported by all
|
|
* browsers, so we make up our own. */
|
|
.skip {
|
|
position: absolute;
|
|
top: -2em;
|
|
left: .25em;
|
|
/* skip-link could appear on top of existing content, so it needs a
|
|
* solid background to be legible. If we set the background, we must
|
|
* also set the foreground. Not all browsers support system colors
|
|
* ("Canvas", "LinkText"), so we need to pick our own colors.
|
|
* #06c is the default link color in FF, IE, and ux.redhat.com
|
|
* #00e is the default in WebKit, Blink, and ancient FF. */
|
|
color: #00e;
|
|
background-color: #fff;
|
|
}
|
|
|
|
.skip:focus {
|
|
top: .5em;
|
|
}
|
|
|
|
/* Todo:
|
|
* - Some browsers don't scale SVGs properly; the img container
|
|
* dimensions crop the image rather than scale it. Investigate
|
|
* if this only applies to Internet Explorer or if it applies to
|
|
* other uncommon browsers too. If any non-IE browsers do this and/or
|
|
* if the spec allows this behavior, try to correct it here.
|
|
* - Wait till Webkit fixes its broken-ass default dark stylesheet
|
|
* then consider trimming the dark stylesheet I provide.
|
|
* */
|