<main>
<table data-theme-container>
<caption>Final color schemes</caption>
<tbody>
<tr data-theme="color-1">
<td class="bg-1">180,100%,5%</td>
<td class="bg-2">180,100%,10%</td>
<td class="bg-3">180,100%,15%</td>
<td class="bg-4">180,100%,20%</td>
<td class="bg-5">180,100%,25%</td>
<td class="bg-6">180,100%,30%</td>
</tr>
<tr data-theme="color-2">
<td class="bg-1">180,100%,5%</td>
<td class="bg-2">180,100%,10%</td>
<td class="bg-3">180,100%,15%</td>
<td class="bg-4">180,100%,20%</td>
<td class="bg-5">180,100%,25%</td>
<td class="bg-6">180,100%,30%</td>
</tr>
<tr data-theme="color-3">
<td class="bg-1">180,100%,5%</td>
<td class="bg-2">180,100%,10%</td>
<td class="bg-3">180,100%,15%</td>
<td class="bg-4">180,100%,20%</td>
<td class="bg-5">180,100%,25%</td>
<td class="bg-6">180,100%,30%</td>
</tr>
<tr data-theme="color-4">
<td class="bg-1">180,100%,5%</td>
<td class="bg-2">180,100%,10%</td>
<td class="bg-3">180,100%,15%</td>
<td class="bg-4">180,100%,20%</td>
<td class="bg-5">180,100%,25%</td>
<td class="bg-6">180,100%,30%</td>
</tr>
<tr data-theme="color-5">
<td class="bg-1">180,100%,5%</td>
<td class="bg-2">180,100%,10%</td>
<td class="bg-3">180,100%,15%</td>
<td class="bg-4">180,100%,20%</td>
<td class="bg-5">180,100%,25%</td>
<td class="bg-6">180,100%,30%</td>
</tr>
<tr data-theme="color-6">
<td class="bg-1">180,100%,5%</td>
<td class="bg-2">180,100%,10%</td>
<td class="bg-3">180,100%,15%</td>
<td class="bg-4">180,100%,20%</td>
<td class="bg-5">180,100%,25%</td>
<td class="bg-6">180,100%,30%</td>
</tr>
</tbody>
</table>
</main>
// variable definiton, [data-theme-container] is the <tr>
[data-theme-container] {
// number of themes, hue of first color, hue-step to next hue
--theme-count: 6;
--first-hue: 180;
--hue-step: calc(360 / var(--theme-count));
// number of shades, steps of lightness
--shade-count: 6;
--lgt-step: 5%;
// lightness definitions, a preprocessor would be nice
--lgt-1: var(--lgt-step); // 10%
--lgt-2: calc(var(--lgt-1) + var(--lgt-step)); // 15%
--lgt-3: calc(var(--lgt-2) + var(--lgt-step)); // 20%
--lgt-4: calc(var(--lgt-3) + var(--lgt-step)); // 25%
--lgt-5: calc(var(--lgt-4) + var(--lgt-step)); // 30%
--lgt-6: calc(var(--lgt-5) + var(--lgt-step)); // 35%
}
// hue definitions, also something for a preprocessor
[data-theme="color-1"] {
--hue: var(--first-hue); // 180
}
[data-theme="color-2"] {
--hue: calc(var(--first-hue) + calc(var(--hue-step))); // 240
}
[data-theme="color-3"] {
--hue: calc(var(--first-hue) + calc(var(--hue-step) * 2)); // 300
}
[data-theme="color-4"] {
--hue: calc(var(--first-hue) + calc(var(--hue-step) * 3)); // 360 => 0
}
[data-theme="color-5"] {
--hue: calc(var(--first-hue) + calc(var(--hue-step) * 4)); // 420 => 60
}
[data-theme="color-6"] {
--hue: calc(var(--first-hue) + calc(var(--hue-step) * 5)); // 480 => 120
}
// assignment of all colors, same for all themes
.bg-1 {
background: hsl(var(--hue), 100%, var(--lgt-1));
}
.bg-2 {
background: hsl(var(--hue), 100%, var(--lgt-2));
}
.bg-3 {
background: hsl(var(--hue), 100%, var(--lgt-3));
}
.bg-4 {
background: hsl(var(--hue), 100%, var(--lgt-4));
}
.bg-5 {
background: hsl(var(--hue), 100%, var(--lgt-5));
}
.bg-6 {
background: hsl(var(--hue), 100%, var(--lgt-6));
}
/* basic styling */
body {
background: #1d1e22;
color: white;
font: 16px sans-serif
}
// Basic set-up for article
// Themes with CSS variables and hsl()
main {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
table {
border: none;
border-collapse: collapse;
}
td[class^="bg-"] {
font: 1.2rem var(--monospace-font);
text-align: center;
vertical-align: middle;
min-width: 11rem;
height: 6rem;
}
caption {
text-align: left;
padding: 1rem;
}
@import url("https://fonts.googleapis.com/css?family=Roboto|Roboto+Mono&display=swap");
:root {
--background-color: hsl(228, 8%, 12%);
--text-color: hsl(0, 0%, 85%);
--border-color: hsl(228, 8%, 20%);
--transparency-bg: url(data:image/gif;base64,R0lGODlhDAAMAHAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQICgAAACwAAAAADAAMAIDX19f///8CFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==);
--border-radius: .3rem;
--regular-font: Roboto, sans-serif;
--monospace-font: 'Roboto Mono', monospace;
--form-field-bg: hsl(0, 0%, 95%);
--form-field-color: hsl(228, 8%, 12%);
--link-color: hsl(206, 89%, 45%);
}
html {
font-size: 62.5%;
box-sizing: border-box;
}
a {
color: var(--link-color);
}
*,
*:before,
*:after {
box-sizing: inherit;
}
body {
font: 1.4rem/1.5 var(--regular-font);
background: var(--background-color);
color: var(--text-color);
margin: 0;
}
h1 {
font-size: 2.4rem;
}
input, textarea, pre, select, [data-preview] {
background: var(--form-field-bg);
color: var(--form-field-color);
}
code, input, textarea, pre, select, [data-preview] {
font-family: var(--monospace-font);
}
input, textarea, pre, select, fieldset, [data-preview] {
border: .1rem var(--border-color) solid;
}
pre {
color: hsl(0, 0%, 15%);
background: hsl(0, 0%, 85%);
padding: 1rem;
max-height: calc(100vh - 40px);
overflow: auto;
}
View Compiled
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.