1
0
Fork 0
mirror of https://git.sr.ht/~seirdy/seirdy.one synced 2024-09-20 04:12:09 +00:00
seirdy.one/assets/css/main.css
Rohan Kumar 793c58eeb9
Improve link colors on gamma-adjusted screens
Existing link colors made it hard to distinguish between visited and
unvisted links on screens that had warmer color temperatures. Adjusted
the colors to make the distinction clear.

Unfortunately, that adjustment made superscript visited links (for
footnotes) fail the APCA, so I added a solid black background to
superscripts. Now they too should have good contrast.
2022-04-23 15:35:08 -07:00

248 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 {
/* 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%;
max-width: 45em;
padding: 0 2%;
}
/* 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 {
/* 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. */
background-color: #fff;
color: #00e;
position: absolute;
left: .25em;
top: -2em;
}
.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.
* */