diff --git a/site/_includes/timeline.njk b/site/_includes/timeline.njk
new file mode 100644
index 0000000000..1aad721223
--- /dev/null
+++ b/site/_includes/timeline.njk
@@ -0,0 +1,110 @@
+
+
+
diff --git a/site/assets/styles.css b/site/assets/styles.css
index da1091fb6a..cdb7b7d8c4 100644
--- a/site/assets/styles.css
+++ b/site/assets/styles.css
@@ -170,12 +170,12 @@ h3 .subtext {
/* FIXME: This is bad for accessibility. Change the order in which sub-tags are generated
in tags.njk instead. */
flex-direction: row-reverse;
- gap: .25rem;
+ gap: 0.25rem;
}
.tags .tag:has(.sub-tag) .sub-tag:not(:last-child)::before {
content: ">";
- margin-inline-end: .25rem;
+ margin-inline-end: 0.25rem;
}
.compat {
@@ -185,18 +185,18 @@ h3 .subtext {
}
.compat .browser {
- --bg: var(--browser-unsupported-bg);
- padding: 1.25rem 0.55rem 0.25rem 0.5rem;
- border-radius: 0.25rem;
- border: 2px solid color-mix(in srgb, var(--bg) 90%, black);
- background-color: var(--bg);
- background-position: center .25rem;
- background-repeat: no-repeat;
- background-size: 1rem;
- display: flex;
- flex-direction: column;
- align-items: center;
- min-width: 4rem;
+ --bg: var(--browser-unsupported-bg);
+ padding: 1.25rem 0.55rem 0.25rem 0.5rem;
+ border-radius: 0.25rem;
+ border: 2px solid color-mix(in srgb, var(--bg) 90%, black);
+ background-color: var(--bg);
+ background-position: center 0.25rem;
+ background-repeat: no-repeat;
+ background-size: 1rem;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ min-width: 4rem;
}
.compat .browser.supported {
@@ -263,12 +263,23 @@ nav li {
}
nav li.monthly {
- background-image: linear-gradient(to top right, var(--baseline-high-label-bg), var(--baseline-low-label-bg), var(--baseline-limited-label-bg));
+ background-image: linear-gradient(
+ to top right,
+ var(--baseline-high-label-bg),
+ var(--baseline-low-label-bg),
+ var(--baseline-limited-label-bg)
+ );
}
-nav li.recent {background: var(--baseline-low-label-bg);}
-nav li.baseline {background: var(--baseline-high-label-bg);}
-nav li.nobaseline {background: var(--baseline-limited-label-bg);}
+nav li.recent {
+ background: var(--baseline-low-label-bg);
+}
+nav li.baseline {
+ background: var(--baseline-high-label-bg);
+}
+nav li.nobaseline {
+ background: var(--baseline-limited-label-bg);
+}
.mdn-docs {
display: flex;
@@ -287,15 +298,15 @@ nav li.nobaseline {background: var(--baseline-limited-label-bg);}
}
.mdn-docs-area::before {
- content: attr(data-area);
- text-transform: uppercase;
- font-size: small;
- padding: .25rem;
- background: #fff5;
- border: 2px solid #0003;
- position: absolute;
- inset: 0 0 auto auto;
- border-width: 0 0 2px 2px;
+ content: attr(data-area);
+ text-transform: uppercase;
+ font-size: small;
+ padding: 0.25rem;
+ background: #fff5;
+ border: 2px solid #0003;
+ position: absolute;
+ inset: 0 0 auto auto;
+ border-width: 0 0 2px 2px;
}
.mdn-docs h4 {
@@ -365,7 +376,7 @@ nav li.nobaseline {background: var(--baseline-limited-label-bg);}
.month-update h2 {
display: flex;
- gap: .5rem;
+ gap: 0.5rem;
justify-content: space-between;
}
@@ -374,7 +385,7 @@ nav li.nobaseline {background: var(--baseline-limited-label-bg);}
}
.groups li {
- padding: .25rem;
+ padding: 0.25rem;
}
.groups li li {
@@ -387,7 +398,7 @@ nav li.nobaseline {background: var(--baseline-limited-label-bg);}
.groups details[open] {
background-image: linear-gradient(to right, black 1px, transparent 0);
- background-position: .3rem 1rem;
+ background-position: 0.3rem 1rem;
background-size: 100% calc(100% - 1rem);
background-repeat: no-repeat;
}
@@ -399,24 +410,88 @@ footer {
font-size: smaller;
}
-#timeline {
+.feature-timeline {
+ width: 100%;
+ height: 2px;
+ background: black;
+ position: relative;
+ margin: 7rem 0;
+}
+
+.feature-timeline .event {
+ position: absolute;
+ top: -1rem;
+ bottom: -1rem;
+ width: 2px;
+ background: black;
+}
+
+.feature-timeline .event::before {
+ content: attr(data-event);
+ position: absolute;
+ bottom: 0;
+ transform: rotate(90deg) translateY(0.5rem);
+ transform-origin: bottom left;
+}
+
+.feature-timeline .event::after {
+ content: attr(data-date);
+ position: absolute;
+ width: 10rem;
+ top: 0;
+ transform: rotate(-90deg) translateY(-0.75rem);
+ transform-origin: top left;
+}
+
+.feature-timeline .event.year {
+ background: transparent;
+}
+
+.feature-timeline .event.year::after {
+ transform: translate(-1.2rem, 0.25rem);
+ font-size: 0.8rem;
+ font-weight: bold;
+ background: white;
+ width: unset;
+ padding: 0.25rem;
+ border-radius: 0.25rem;
+ border: 1px solid black;
+ text-align: center;
+}
+
+.feature-timeline .event.low::before,
+.feature-timeline .event.high::before {
+ content: "";
+ width: 1.5rem;
+ height: 1.5rem;
+ background-image: url(./baseline-high.svg);
+ background-repeat: no-repeat;
+ transform: translate(-0.75rem, 1.5rem);
+ background-position: center;
+}
+
+.feature-timeline .event.low::before {
+ background-image: url(./baseline-low.svg);
+}
+
+#timeline {
overflow-x: auto;
overflow-y: auto;
height: calc(100vh - 16rem);
display: grid;
grid-auto-columns: 7rem;
- font-size: .6rem;
+ font-size: 0.6rem;
gap: 1px;
background: var(--text);
}
#timeline .timeline-year {
- grid-row: 1;
- display: grid;
- grid-auto-rows: 1rem;
- width: 6.5rem;
- background: var(--background);
- padding: 0 .25rem;
+ grid-row: 1;
+ display: grid;
+ grid-auto-rows: 1rem;
+ width: 6.5rem;
+ background: var(--background);
+ padding: 0 0.25rem;
}
#timeline .timeline-year h2 {
font-size: inherit;
@@ -427,4 +502,4 @@ footer {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
-}
\ No newline at end of file
+}
diff --git a/site/feature.njk b/site/feature.njk
index d0c9a9ddaf..b35276f008 100644
--- a/site/feature.njk
+++ b/site/feature.njk
@@ -9,4 +9,6 @@ eleventyComputed:
title: "{{ feature.name }}"
---
-{% include "feature_full.njk" %}
\ No newline at end of file
+{% include "feature_full.njk" %}
+
+{% include "timeline.njk" %}