Use OpenProps for consistent styles

This commit is contained in:
thiloho
2023-05-22 12:34:55 +02:00
parent a3334ab45e
commit dd4e6491de
10 changed files with 107 additions and 66 deletions

6
package-lock.json generated
View File

@@ -12,6 +12,7 @@
"@fontsource/jetbrains-mono": "^4.5.12", "@fontsource/jetbrains-mono": "^4.5.12",
"@fontsource/roboto": "^4.5.8", "@fontsource/roboto": "^4.5.8",
"astro": "^2.4.5", "astro": "^2.4.5",
"open-props": "^1.5.8",
"rehype-autolink-headings": "^6.1.1", "rehype-autolink-headings": "^6.1.1",
"sharp": "^0.32.1", "sharp": "^0.32.1",
"svelte": "^3.59.1" "svelte": "^3.59.1"
@@ -3851,6 +3852,11 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/open-props": {
"version": "1.5.8",
"resolved": "https://registry.npmjs.org/open-props/-/open-props-1.5.8.tgz",
"integrity": "sha512-pE9oKg+4rDrKNJpHNSP1ensgMz41YW5pPCHExd4P12595gdObMmiO1OhTvXG0t7inRS54GhyZr5jm+28XzapEg=="
},
"node_modules/ora": { "node_modules/ora": {
"version": "6.3.1", "version": "6.3.1",
"resolved": "https://registry.npmjs.org/ora/-/ora-6.3.1.tgz", "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.1.tgz",

View File

@@ -11,11 +11,12 @@
}, },
"dependencies": { "dependencies": {
"@astrojs/svelte": "^2.1.1", "@astrojs/svelte": "^2.1.1",
"astro": "^2.4.5",
"rehype-autolink-headings": "^6.1.1",
"sharp": "^0.32.1",
"@fontsource/jetbrains-mono": "^4.5.12", "@fontsource/jetbrains-mono": "^4.5.12",
"@fontsource/roboto": "^4.5.8", "@fontsource/roboto": "^4.5.8",
"astro": "^2.4.5",
"open-props": "^1.5.8",
"rehype-autolink-headings": "^6.1.1",
"sharp": "^0.32.1",
"svelte": "^3.59.1" "svelte": "^3.59.1"
} }
} }

View File

@@ -40,7 +40,7 @@
<style> <style>
.article-search { .article-search {
padding: 1rem; padding: var(--size-3);
position: absolute; position: absolute;
inset-inline: 0; inset-inline: 0;
border: var(--standard-border); border: var(--standard-border);
@@ -56,6 +56,6 @@
input { input {
inline-size: 100%; inline-size: 100%;
margin-block-start: 0.25rem; margin-block-start: var(--size-1);
} }
</style> </style>

View File

@@ -44,6 +44,6 @@
<style> <style>
summary { summary {
display: grid; display: grid;
padding: 0.5rem; padding: var(--size-2);
} }
</style> </style>

View File

@@ -20,9 +20,9 @@ const currentDateYear = new Date().getFullYear();
<style> <style>
footer { footer {
margin-block-start: 4rem; padding-block: var(--size-3);
padding-block: 1rem; margin-block-start: var(--size-9);
background: linear-gradient( background-image: linear-gradient(
0deg, 0deg,
var(--tertiary-background-color) 0%, var(--tertiary-background-color) 0%,
var(--background-color) 100% var(--background-color) 100%
@@ -40,6 +40,6 @@ const currentDateYear = new Date().getFullYear();
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
list-style: none; list-style: none;
gap: 1rem; gap: var(--size-3);
} }
</style> </style>

View File

@@ -11,6 +11,6 @@ const { title } = Astro.props;
<style> <style>
header { header {
margin-block-end: 4rem; margin-block-end: var(--size-9);
} }
</style> </style>

View File

@@ -24,7 +24,6 @@
ul { ul {
position: absolute; position: absolute;
border: var(--standard-border); border: var(--standard-border);
padding-inline-start: 2rem;
background-color: var(--background-color); background-color: var(--background-color);
inset-block-start: var(--nav-height); inset-block-start: var(--nav-height);
margin: 0; margin: 0;
@@ -35,7 +34,7 @@
a { a {
display: block; display: block;
padding-inline: 1rem; padding-inline: var(--size-3);
padding-block: 0.25rem; padding-block: var(--size-1);
} }
</style> </style>

View File

@@ -1,12 +1,12 @@
<script lang="ts"> <script lang="ts">
import Dropdown from "./Dropdown.svelte"; import Dropdown from "./Dropdown.svelte";
let themeOptions = ["System", "Light", "Dark"]; let themeOptions = ["system", "light", "dark"];
let theme = "System"; let theme = "System";
function loadTheme() { function loadTheme() {
theme = localStorage.getItem("theme") || "System"; theme = localStorage.getItem("theme") || "system";
} }
function saveTheme() { function saveTheme() {
@@ -27,7 +27,7 @@
{#each themeOptions as option, index} {#each themeOptions as option, index}
<div class="input-wrapper"> <div class="input-wrapper">
<input type="radio" id="theme-{option}" name="theme" value={option} bind:group={theme} on:change={saveTheme} /> <input type="radio" id="theme-{option}" name="theme" value={option} bind:group={theme} on:change={saveTheme} />
<label for="theme-{option}">{option}</label> <label for="theme-{option}">{option[0].toUpperCase() + option.slice(1)}</label>
</div> </div>
{/each} {/each}
</div> </div>
@@ -40,18 +40,14 @@
inset-block-start: var(--nav-height); inset-block-start: var(--nav-height);
background-color: var(--background-color); background-color: var(--background-color);
border: var(--standard-border); border: var(--standard-border);
padding: 1rem; padding: var(--size-3);
display: grid; display: grid;
gap: 0.5rem; gap: var(--size-2);
}
input {
margin: 0;
} }
.input-wrapper { .input-wrapper {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 0.5rem; gap: var(--size-2);
} }
</style> </style>

View File

@@ -1,6 +1,7 @@
--- ---
const { title, description } = Astro.props; const { title, description } = Astro.props;
import "open-props/style";
import "../styles/global.css"; import "../styles/global.css";
import "@fontsource/roboto"; import "@fontsource/roboto";
import "@fontsource/roboto/700.css"; import "@fontsource/roboto/700.css";

View File

@@ -1,31 +1,37 @@
:root, html.Light { :root, .light {
--nav-height: 3rem; --nav-height: var(--size-8);
--standard-border: 0.0625rem solid var(--tertiary-background-color); --standard-border: var(--border-size-1) solid var(--tertiary-background-color);
--background-color: hsl(0 0% 100%); --font-sans: "Roboto", sans-serif;
--secondary-background-color: hsl(0 0% 95%); --font-mono: "JetBrains Mono", monospace;
--tertiary-background-color: hsl(0 0% 90%);
--text-color: hsl(0 0% 10%); --background-color: var(--gray-0);
--accent-color: #1e40af; --secondary-background-color: var(--gray-1);
--tertiary-background-color: var(--gray-2);
--text-color: var(--gray-12);
--accent-color: var(--blue-11);
--radio-border-color: var(--gray-5);
color-scheme: light; color-scheme: light;
} }
@media (prefers-color-scheme: dark) { @media (prefers-color-scheme: dark) {
:root { :root:not(.light):not(.dark) {
--background-color: hsl(0 0% 10%); --background-color: var(--gray-10);
--secondary-background-color: hsl(0 0% 15%); --secondary-background-color: var(--gray-9);
--tertiary-background-color: hsl(0 0% 20%); --tertiary-background-color: var(--gray-8);
--text-color: hsl(0 0% 90%); --text-color: var(--gray-0);
--accent-color: #93c5fd; --accent-color: var(--blue-2);
--radio-border-color: var(--gray-7);
color-scheme: dark; color-scheme: dark;
} }
} }
html.Dark { .dark {
--background-color: hsl(0 0% 10%); --background-color: var(--gray-10);
--secondary-background-color: hsl(0 0% 15%); --secondary-background-color: var(--gray-9);
--tertiary-background-color: hsl(0 0% 20%); --tertiary-background-color: var(--gray-8);
--text-color: hsl(0 0% 90%); --text-color: var(--gray-0);
--accent-color: #93c5fd; --accent-color: var(--blue-2);
--radio-border-color: var(--gray-7);
color-scheme: dark; color-scheme: dark;
} }
@@ -34,9 +40,9 @@ html {
} }
body { body {
line-height: 1.6; line-height: var(--font-lineheight-3);
margin: 0; margin: 0;
font-family: "Roboto", sans-serif; font-family: var(--font-sans);
background-color: var(--background-color); background-color: var(--background-color);
color: var(--text-color); color: var(--text-color);
display: flex; display: flex;
@@ -48,7 +54,7 @@ nav,
header, header,
main, main,
footer { footer {
padding-inline: 1rem; padding-inline: var(--size-3);
} }
main { main {
@@ -56,7 +62,7 @@ main {
} }
.container { .container {
max-inline-size: 65ch; max-inline-size: var(--size-content-3);
margin-inline: auto; margin-inline: auto;
} }
@@ -76,9 +82,8 @@ img {
} }
.icon { .icon {
inline-size: 1.5rem; inline-size: var(--size-5);
block-size: 1.5rem; block-size: var(--size-5);
vertical-align: middle;
} }
table { table {
@@ -90,19 +95,19 @@ table {
td, td,
th { th {
border: var(--standard-border); border: var(--standard-border);
padding-inline: 0.5rem; padding-inline: var(--size-2);
padding-block: 0.25rem; padding-block: var(--size-1);
} }
pre { pre {
padding: 1rem; padding: var(--size-3);
background-color: hsl(0 0% 15%) !important; background-color: var(--gray-9) !important;
border: var(--standard-border); border: var(--standard-border);
} }
code { code {
font-family: "JetBrains Mono", monospace; font-family: var(--font-mono);
font-size: 0.875rem; font-size: var(--font-size-0);
} }
.heading-linker { .heading-linker {
@@ -113,12 +118,16 @@ code {
.heading-linker::before { .heading-linker::before {
content: "#"; content: "#";
color: var(--accent-color); color: var(--accent-color);
margin-inline-end: 0.25rem; margin-inline-end: var(--size-2);
} }
input { button, input {
font: inherit; font: inherit;
padding-inline: 0.5rem; padding-inline: var(--size-2);
padding-block: var(--size-1);
background-color: var(--secondary-background-color);
border: var(--standard-border);
color: inherit;
} }
summary, summary,
@@ -126,13 +135,9 @@ button {
cursor: pointer; cursor: pointer;
} }
button {
color: inherit;
}
ul, ul,
ol { ol {
line-height: 2; line-height: var(--font-lineheight-5);
padding-inline-start: 1rem; padding-inline-start: 1rem;
} }
@@ -142,6 +147,39 @@ a {
blockquote { blockquote {
margin-inline-start: 0; margin-inline-start: 0;
padding-inline-start: 1rem; padding-inline-start: var(--size-3);
border-inline-start: var(--standard-border); border-inline-start: var(--standard-border);
} }
input[type="radio"] {
appearance: none;
background-color: var(--background-color);
border: var(--standard-border);
border-color: var(--radio-border-color);
margin: 0;
font: inherit;
inline-size: var(--size-4);
block-size: var(--size-4);
border-radius: var(--radius-round);
display: grid;
place-content: center;
}
input[type="radio"]::before {
content: "";
inline-size: var(--size-2);
block-size: var(--size-2);
border-radius: var(--radius-round);
transform: scale(0);
background-color: var(--accent-color);
}
input[type="radio"]:checked::before {
transform: scale(1);
}
hr {
block-size: var(--border-size-2);
background-color: var(--tertiary-background-color);
border: none;
}