Note
++ This is a tonal Alert. Notice the lack of icons - it's not + really needed here. +
+diff --git a/dist/op+ui.css b/dist/op+ui.css index fb14b0a..1e38ab1 100644 --- a/dist/op+ui.css +++ b/dist/op+ui.css @@ -660,76 +660,102 @@ When you visibly want to hide an element but make it accessible for screen reade } } @layer components.root { - :where(nav.tabs) { + :where(.tab-buttons) { --_bg-color: transparent; - & > [role="tablist"] { - button { - outline-color: transparent; - outline-offset: -4px; + align-items: center; + display: flex; - &[aria-selected="true"] { - &:focus-visible { - outline: 2px solid var(--text-color-1); - } + label { + cursor: pointer; + outline-color: transparent; + outline-offset: -4px; + + &:has(input:disabled) { + cursor: not-allowed; + } + + &:has(input:focus-visible) { + outline: 2px solid var(--text-color-1); + } + + input { + opacity: 0; + pointer-events: none; + position: absolute; + } + + /* Disabled */ + &:has(input:disabled) { + color: oklch(from currentColor calc(l * 0.75) c h); + + &:hover { + background-color: var(--_bg-color); } } } /* Underlined */ &.underlined { - /* Tab list */ - & > [role="tablist"] { - border-bottom: 1px solid var(--border-color); + --_accent-color: var(--color-8); - button { - --_ripple-color: light-dark( - color-mix(in oklch, var(--gray-2) 80%, var(--color-8)), - color-mix(in oklch, var(--gray-13) 80%, var(--color-8)) - ); + border-bottom: 1px solid var(--border-color); - background: var(--_bg-color) var(--ripple, none); - font-weight: 500; - line-height: var(--font-lineheight-4); - padding: var(--size-2) var(--size-3); + label { + --_ripple-color: light-dark( + color-mix(in oklch, var(--gray-2) 80%, var(--_accent-color)), + color-mix(in oklch, var(--gray-13) 80%, var(--_accent-color)) + ); - &:focus-visible { - border-radius: 0; - } + background: var(--_bg-color) var(--ripple, none); + font-weight: 500; + line-height: var(--font-lineheight-4); + padding: var(--size-2) var(--size-3); - &[aria-selected="true"] { - border-block-end: 2px solid var(--primary); - color: var(--primary); - } + &:focus-visible { + border-radius: 0; + } - @media (prefers-reduced-motion: no-preference) { - transition: background-color 0.2s var(--ease-out-3), - border-color 0.2s var(--ease-out-3), color 0.2s var(--ease-out-3), - outline-offset 0.05s var(--ease-1); - - /*** Ripple effect */ - background-position: center; - transition: background var(--button-ripple-duration); - &:where(:not(:active):hover) { - --ripple: radial-gradient( - circle, - transparent 1%, - var(--_ripple-color) 1% - ) - center/15000%; - } + /* Checked */ + &:has(input:checked) { + border-block-end: 2px solid var(--_accent-color); + color: var(--_accent-color); + } - &:where(:hover:active) { - background-size: var(--button-ripple-size); - transition: background 0s; - } + /* Disabled */ + &:has(input:disabled) { + --_accent-color: oklch(from currentColor calc(l * 0.75) c h); + } - &:hover { - background-color: light-dark( - oklch(from var(--primary) calc(l * 0.75) none h / 5%), - oklch(from var(--primary) calc(l * 1.25) none h / 5%) - ); - } + @media (prefers-reduced-motion: no-preference) { + transition: + background-color 0.2s var(--ease-out-3), + border-color 0.2s var(--ease-out-3), + color 0.2s var(--ease-out-3), + outline-offset 0.05s var(--ease-1); + + /*** Ripple effect */ + background-position: center; + transition: background var(--button-ripple-duration); + &:where(:has(:not(:disabled)):hover) { + --ripple: radial-gradient( + circle, + transparent 1%, + var(--_ripple-color) 1% + ) + center/15000%; + } + + &:where(:hover:active) { + background-size: var(--button-ripple-size); + transition: background 0s; + } + + &:hover { + background-color: light-dark( + oklch(from var(--primary) calc(l * 0.75) none h / 5%), + oklch(from var(--primary) calc(l * 1.25) none h / 5%) + ); } } } @@ -741,39 +767,46 @@ When you visibly want to hide an element but make it accessible for screen reade --_radius: var(--border-radius); --_selected-bg: var(--surface-filled); - & > [role="tablist"] { + background-color: var(--_bg-color); + border: var(--border-width) solid var(--border-color); + border-radius: var(--_radius); + overflow: hidden; + padding: 0.792ex; + width: fit-content; + + label { background-color: var(--_bg-color); - border: var(--border-width) solid var(--border-color); border-radius: var(--_radius); - overflow: hidden; - padding: 0.792ex; - width: fit-content; + line-height: var(--font-lineheight-2); + padding-block: var(--size-1); + padding-inline: var(--size-3); - button { - background-color: var(--_bg-color); - border-radius: var(--_radius); - line-height: var(--font-lineheight-4); - padding-inline: var(--size-3); + &:hover { + background-color: oklch(from var(--_bg-color) calc(l * 1.25) c h); + } + + /* Checked */ + &:has(input:checked) { + background-color: var(--_selected-bg); &:hover { - background-color: oklch(from var(--_bg-color) calc(l * 1.25) c h); + background-color: oklch( + from var(--_selected-bg) calc(l * 1.25) c h + ); } - &[aria-selected="true"] { - background-color: var(--_selected-bg); - - &:hover { - background-color: oklch( - from var(--_selected-bg) calc(l * 1.25) c h - ); - } + /* Checked & disabled */ + &:has(input:disabled) { + background-color: oklch(from var(--_bg-color) calc(l * 0.75) c h); } + } - @media (prefers-reduced-motion: no-preference) { - transition: background-color 0.2s var(--ease-out-3), - border-color 0.2s var(--ease-out-3), color 0.2s var(--ease-out-3), - outline-offset 0.05s var(--ease-1); - } + @media (prefers-reduced-motion: no-preference) { + transition: + background-color 0.2s var(--ease-out-3), + border-color 0.2s var(--ease-out-3), + color 0.2s var(--ease-out-3), + outline-offset 0.05s var(--ease-1); } } } diff --git a/dist/ui.css b/dist/ui.css index 8201a4e..003b9ef 100644 --- a/dist/ui.css +++ b/dist/ui.css @@ -579,76 +579,102 @@ When you visibly want to hide an element but make it accessible for screen reade } @layer components.root { - :where(nav.tabs) { + :where(.tab-buttons) { --_bg-color: transparent; - & > [role="tablist"] { - button { - outline-color: transparent; - outline-offset: -4px; + align-items: center; + display: flex; - &[aria-selected="true"] { - &:focus-visible { - outline: 2px solid var(--text-color-1); - } + label { + cursor: pointer; + outline-color: transparent; + outline-offset: -4px; + + &:has(input:disabled) { + cursor: not-allowed; + } + + &:has(input:focus-visible) { + outline: 2px solid var(--text-color-1); + } + + input { + opacity: 0; + pointer-events: none; + position: absolute; + } + + /* Disabled */ + &:has(input:disabled) { + color: oklch(from currentColor calc(l * 0.75) c h); + + &:hover { + background-color: var(--_bg-color); } } } /* Underlined */ &.underlined { - /* Tab list */ - & > [role="tablist"] { - border-bottom: 1px solid var(--border-color); + --_accent-color: var(--color-8); - button { - --_ripple-color: light-dark( - color-mix(in oklch, var(--gray-2) 80%, var(--color-8)), - color-mix(in oklch, var(--gray-13) 80%, var(--color-8)) - ); + border-bottom: 1px solid var(--border-color); - background: var(--_bg-color) var(--ripple, none); - font-weight: 500; - line-height: var(--font-lineheight-4); - padding: var(--size-2) var(--size-3); + label { + --_ripple-color: light-dark( + color-mix(in oklch, var(--gray-2) 80%, var(--_accent-color)), + color-mix(in oklch, var(--gray-13) 80%, var(--_accent-color)) + ); - &:focus-visible { - border-radius: 0; - } + background: var(--_bg-color) var(--ripple, none); + font-weight: 500; + line-height: var(--font-lineheight-4); + padding: var(--size-2) var(--size-3); - &[aria-selected="true"] { - border-block-end: 2px solid var(--primary); - color: var(--primary); - } + &:focus-visible { + border-radius: 0; + } - @media (prefers-reduced-motion: no-preference) { - transition: background-color 0.2s var(--ease-out-3), - border-color 0.2s var(--ease-out-3), color 0.2s var(--ease-out-3), - outline-offset 0.05s var(--ease-1); - - /*** Ripple effect */ - background-position: center; - transition: background var(--button-ripple-duration); - &:where(:not(:active):hover) { - --ripple: radial-gradient( - circle, - transparent 1%, - var(--_ripple-color) 1% - ) - center/15000%; - } + /* Checked */ + &:has(input:checked) { + border-block-end: 2px solid var(--_accent-color); + color: var(--_accent-color); + } - &:where(:hover:active) { - background-size: var(--button-ripple-size); - transition: background 0s; - } + /* Disabled */ + &:has(input:disabled) { + --_accent-color: oklch(from currentColor calc(l * 0.75) c h); + } - &:hover { - background-color: light-dark( - oklch(from var(--primary) calc(l * 0.75) none h / 5%), - oklch(from var(--primary) calc(l * 1.25) none h / 5%) - ); - } + @media (prefers-reduced-motion: no-preference) { + transition: + background-color 0.2s var(--ease-out-3), + border-color 0.2s var(--ease-out-3), + color 0.2s var(--ease-out-3), + outline-offset 0.05s var(--ease-1); + + /*** Ripple effect */ + background-position: center; + transition: background var(--button-ripple-duration); + &:where(:has(:not(:disabled)):hover) { + --ripple: radial-gradient( + circle, + transparent 1%, + var(--_ripple-color) 1% + ) + center/15000%; + } + + &:where(:hover:active) { + background-size: var(--button-ripple-size); + transition: background 0s; + } + + &:hover { + background-color: light-dark( + oklch(from var(--primary) calc(l * 0.75) none h / 5%), + oklch(from var(--primary) calc(l * 1.25) none h / 5%) + ); } } } @@ -660,39 +686,46 @@ When you visibly want to hide an element but make it accessible for screen reade --_radius: var(--border-radius); --_selected-bg: var(--surface-filled); - & > [role="tablist"] { + background-color: var(--_bg-color); + border: var(--border-width) solid var(--border-color); + border-radius: var(--_radius); + overflow: hidden; + padding: 0.792ex; + width: fit-content; + + label { background-color: var(--_bg-color); - border: var(--border-width) solid var(--border-color); border-radius: var(--_radius); - overflow: hidden; - padding: 0.792ex; - width: fit-content; + line-height: var(--font-lineheight-2); + padding-block: var(--size-1); + padding-inline: var(--size-3); - button { - background-color: var(--_bg-color); - border-radius: var(--_radius); - line-height: var(--font-lineheight-4); - padding-inline: var(--size-3); + &:hover { + background-color: oklch(from var(--_bg-color) calc(l * 1.25) c h); + } + + /* Checked */ + &:has(input:checked) { + background-color: var(--_selected-bg); &:hover { - background-color: oklch(from var(--_bg-color) calc(l * 1.25) c h); + background-color: oklch( + from var(--_selected-bg) calc(l * 1.25) c h + ); } - &[aria-selected="true"] { - background-color: var(--_selected-bg); - - &:hover { - background-color: oklch( - from var(--_selected-bg) calc(l * 1.25) c h - ); - } + /* Checked & disabled */ + &:has(input:disabled) { + background-color: oklch(from var(--_bg-color) calc(l * 0.75) c h); } + } - @media (prefers-reduced-motion: no-preference) { - transition: background-color 0.2s var(--ease-out-3), - border-color 0.2s var(--ease-out-3), color 0.2s var(--ease-out-3), - outline-offset 0.05s var(--ease-1); - } + @media (prefers-reduced-motion: no-preference) { + transition: + background-color 0.2s var(--ease-out-3), + border-color 0.2s var(--ease-out-3), + color 0.2s var(--ease-out-3), + outline-offset 0.05s var(--ease-1); } } } diff --git a/index.html b/index.html new file mode 100644 index 0000000..32fd2c5 --- /dev/null +++ b/index.html @@ -0,0 +1,4969 @@ + + +
+ + + + +Auto-generated from the examples in the docs
+ + + ++ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Vivamus sodales, nulla sit amet porttitor rhoncus, lacus ex + vestibulum libero, ac mollis neque ante id justo. Nam tempor + euismod nisi ac ornare. Pellentesque id sapien lacinia, + venenatis est aliquam, dignissim elit. Suspendisse potenti. + Cras ut ante in libero tempus sodales sed quis dolor. +
++ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Vivamus sodales, nulla sit amet porttitor rhoncus, lacus ex + vestibulum libero, ac mollis neque ante id justo. Nam tempor + euismod nisi ac ornare. Pellentesque id sapien lacinia, + venenatis est aliquam, dignissim elit. Suspendisse potenti. + Cras ut ante in libero tempus sodales sed quis dolor. +
++ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Vivamus sodales, nulla sit amet porttitor rhoncus, lacus ex + vestibulum libero, ac mollis neque ante id justo. Nam tempor + euismod nisi ac ornare. Pellentesque id sapien lacinia, + venenatis est aliquam, dignissim elit. Suspendisse potenti. + Cras ut ante in libero tempus sodales sed quis dolor. +
++ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Vivamus sodales, nulla sit amet porttitor rhoncus, lacus ex + vestibulum libero, ac mollis neque ante id justo. Nam tempor + euismod nisi ac ornare. Pellentesque id sapien lacinia, + venenatis est aliquam, dignissim elit. Suspendisse potenti. + Cras ut ante in libero tempus sodales sed quis dolor. +
++ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Vivamus sodales, nulla sit amet porttitor rhoncus, lacus ex + vestibulum libero, ac mollis neque ante id justo. Nam tempor + euismod nisi ac ornare. Pellentesque id sapien lacinia, + venenatis est aliquam, dignissim elit. Suspendisse potenti. + Cras ut ante in libero tempus sodales sed quis dolor. +
++ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Vivamus sodales, nulla sit amet porttitor rhoncus, lacus + ex vestibulum libero, ac mollis neque ante id justo. Nam + tempor euismod nisi ac ornare. Pellentesque id sapien + lacinia, venenatis est aliquam, dignissim elit. + Suspendisse potenti. Cras ut ante in libero tempus sodales + sed quis dolor. +
++ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Vivamus sodales, nulla sit amet porttitor rhoncus, lacus + ex vestibulum libero, ac mollis neque ante id justo. Nam + tempor euismod nisi ac ornare. Pellentesque id sapien + lacinia, venenatis est aliquam, dignissim elit. + Suspendisse potenti. Cras ut ante in libero tempus sodales + sed quis dolor. +
++ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Vivamus sodales, nulla sit amet porttitor rhoncus, lacus + ex vestibulum libero, ac mollis neque ante id justo. Nam + tempor euismod nisi ac ornare. Pellentesque id sapien + lacinia, venenatis est aliquam, dignissim elit. + Suspendisse potenti. Cras ut ante in libero tempus sodales + sed quis dolor. +
++ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Vivamus sodales, nulla sit amet porttitor rhoncus, lacus + ex vestibulum libero, ac mollis neque ante id justo. Nam + tempor euismod nisi ac ornare. Pellentesque id sapien + lacinia, venenatis est aliquam, dignissim elit. + Suspendisse potenti. Cras ut ante in libero tempus + sodales sed quis dolor. +
++ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Vivamus sodales, nulla sit amet porttitor rhoncus, lacus + ex vestibulum libero, ac mollis neque ante id justo. Nam + tempor euismod nisi ac ornare. Pellentesque id sapien + lacinia, venenatis est aliquam, dignissim elit. + Suspendisse potenti. Cras ut ante in libero tempus + sodales sed quis dolor. +
++ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Vivamus sodales, nulla sit amet porttitor rhoncus, lacus + ex vestibulum libero, ac mollis neque ante id justo. Nam + tempor euismod nisi ac ornare. Pellentesque id sapien + lacinia, venenatis est aliquam, dignissim elit. + Suspendisse potenti. Cras ut ante in libero tempus + sodales sed quis dolor. +
++ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Vivamus sodales, nulla sit amet porttitor rhoncus, lacus ex + vestibulum libero, ac mollis neque ante id justo. Nam tempor + euismod nisi ac ornare. +
++ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Vivamus sodales, nulla sit amet porttitor rhoncus, lacus ex + vestibulum libero, ac mollis neque ante id justo. Nam tempor + euismod nisi ac ornare. Pellentesque id sapien lacinia, + venenatis est aliquam, dignissim elit. Suspendisse potenti. + Cras ut ante in libero tempus sodales sed quis dolor. +
++ This is a tonal Alert. Notice the lack of icons - it's not + really needed here. +
++ This is an outlined Alert. Why not use a + Card since they + look very similar? For one, the Alert is a more focused + component with different properties. +
+Link list item
Headline
Headline
+Supporting text
+Headline
++ Supporting text that truly is quite long enough to fill up + multiple lines. +
+Headline
Headline
+Supporting text
+Headline
Headline
+Supporting text
+Headline
+Supporting text
+Headline
+Supporting text
+Headline
+Supporting text
+Headline
+Supporting text
+Headline
Headline
+Supporting text
+Headline
++ Supporting text that truly is quite long enough to fill up + multiple lines. +
+Save All
Save
No inset
Inset class
+Makes the text line up nicely
+Inset class
+Any div.start will be hidden when inset
Delete
Headline
+Supporting text
+So
Many
Borders
I need borders
Help
Thanks
Popover text content
All changes saved
All changes saved
All changes saved
| Country | +Major Cities | +Nature | +|||
|---|---|---|---|---|---|
| Capital | +2nd Largest | +3rd Largest | +National Animal | +National Bird | +|
| Norway | +Oslo | +Bergen | +Trondheim | +Elk | +White-throated Dipper | +
| Sweden | +Stockholm | +Göteborg | +Malmö | +Elk | +Common Blackbird | +
| Denmark | +København | +Aarhus | +Odense | +Mute Swan | +Mute Swan | +
| Finland | +Helsinki | +Espoo | +Tampere | +Brown Bear | +Whooper Swan | +
| Iceland | +Reykjavík | +Kópavogur | +Hafnarfjörður | +Gyrfalcon | +Gyrfalcon | +
| Scandinavia != The Nordics | +|||||
| Unit | +Personality | +Dating Status | +
|---|---|---|
| px | +Fixed mindset, refuses to change | +In a committed relationship with legacy code | +
| rem | +Flexible, but dependent on parents | +Popular in the modern dating scene | +
| vw | +Goes with the flow, sometimes too much | +In an open relationship with responsive design | +
| ch | +Typography nerd | +Looking for meaningful connections | +
| Swipe right for responsive design! | +||
| Property | +Drama Level | +Famous Battles | +
|---|---|---|
| !important | +Nuclear ☢️ | +The Great Specificity Wars of 2012 | +
| z-index | +Astronomical 🌌 | +"Why is my modal behind everything?!" | +
| float | +Legacy Nightmare 👻 | +The Pre-Flexbox Dark Ages | +
| box-sizing | +Mathematical Chaos 🧮 | +Border-box Revolution of 2011 | +
| + Yes I had AI generate the cringy table contents. I + chuckled a little though. + | +||
Body Large
+Body
+Overline
+Zero or more p elements
+Followed by zero or more p elements
+ ++ "Occupy your mind, don't stay home. Talk to all your friends, + but don't look at your phone” + ++
+ We get lots of complaints about it actually, with people regularly + asking us things like: +
++++ Why is Tailwind removing the default styles on my +
+h1elements? How do I disable this? What do you mean + I lose all the other base styles too? +
+ We hear you, but we're not convinced that simply disabling our base
+ styles is what you really want. You don't want to have to remove
+ annoying margins every time you use a p element in a
+ piece of your dashboard UI. And I doubt you really want your blog
+ posts to use the user-agent styles either — you want them to look
+ awesome, not awful.
+
+ The @tailwindcss/typography plugin is our attempt to
+ give you what you actually want, without any of the
+ downsides of doing something stupid like disabling our base styles.
+
+ It adds a new prose class that you can slap on any
+ block of vanilla HTML content and turn it into a beautiful,
+ well-formatted document:
+
<article class="prose">
+ <h1>Garlic bread with cheese: What the science tells us</h1>
+ <p>
+ For years parents have espoused the health benefits of eating garlic bread
+ with cheese to their children, with the food earning such an iconic status
+ in our culture that kids will often dress up as warm, cheesy loaf for
+ Halloween.
+ </p>
+ <p>
+ But a recent study shows that the celebrated appetizer may be linked to a
+ series of rabies cases springing up around the country.
+ </p>
+ <!-- ... -->
+ </article>
+ + For more information about how to use the plugin and the features it + includes, + read the documentation. +
++ What follows from here is just a bunch of absolute nonsense I've + written to dogfood the plugin itself. It includes every sensible + typographic element I could think of, like + bold text, unordered lists, ordered lists, code + blocks, block quotes, and even italics. +
++ It's important to cover all of these use cases for a few reasons: +
+Now we're going to try out another header style.
++ So that's a header for you — with any luck if we've done our job + correctly that will look pretty reasonable. +
+Something a wise person once told me about typography is:
++++ Typography is pretty important if you don't want your stuff to + look like trash. Make it good then it won't be bad. +
+
+ It's probably important that images look okay here by default as + well: +
++ Now I'm going to show you an example of an unordered list to make + sure that looks good, too: +
+And that's the end of this section.
++ Sometimes you have headings directly underneath each other. In those + cases you often have to undo the top margin on the second heading + because it usually looks better for the headings to be closer + together than a paragraph followed by a heading should be. +
++ When a heading comes after a paragraph, we need a bit more space, + like I already mentioned above. Now let's see what a more complex + list would look like. +
++ I often do this thing where list items have headings. +
++ For some reason I think this looks cool which is unfortunate + because it's pretty annoying to get the styles right. +
++ I often have two or three paragraphs in these list items, too, + so the hard part is getting the spacing between the paragraphs, + list item heading, and separate list items to all make sense. + Pretty tough honestly, you could make a strong argument that you + just shouldn't write this way. +
++ Since this is a list, I need at least two items. +
++ I explained what I'm doing already in the previous list item, + but a list wouldn't be a list if it only had one item, and we + really want this to look realistic. That's why I've added this + second list item so I actually have something to look at when + writing the styles. +
++ It's not a bad idea to add a third item either. +
++ I think it probably would've been fine to just use two items but + three is definitely not worse, and since I seem to be having no + trouble making up arbitrary things to type, I might as well + include it. I'm going to press Enter now. +
++ After this sort of list I usually have a closing statement or + paragraph, because it kinda looks weird jumping right to a heading. +
++ I think most people are going to use + highlight.js + or + Prism + or something if they want to style their code blocks but it wouldn't + hurt to make them look okay out of the box, even with no + syntax highlighting. +
+
+ Here's what a default tailwind.config.js file looks
+ like at the time of writing:
+
module.exports = {
+ purge: [],
+ theme: {
+ extend: {},
+ },
+ variants: {},
+ plugins: [],
+ }
+ Hopefully that looks good enough to you.
++ Nested lists basically always look bad which is why editors like + Medium don't even let you do it, but I guess since some of you + goofballs are going to do it we have to carry the burden of at least + making it work. +
+
+ The most annoying thing about lists in Markdown is that
+ <li> elements aren't given a child
+ <p> tag unless there are multiple paragraphs in
+ the list item. That means I have to worry about styling that
+ annoying situation too.
+
For example, here's another nested list.
+But this time with a second paragraph.
+<p> tags+ But in this second top-level list item, they will. +
++ This is especially annoying because of the spacing on this + paragraph. +
+
+ As you can see here, because I've added a second line, this
+ list item now has a <p> tag.
+
This is the second line I'm talking about by the way.
++ Finally here's another list item so it's more like a list. +
++ A closing list item, but with no nested list, because why not? +
+And finally a sentence to close off this section.
++ Well, that's not exactly true, we first released this plugin back in + 2020 and it took three years before we added description lists. But + they're here now, so let's just be happy about that…okay? They can + be great for things like FAQs. +
++ I almost forgot to mention links, like + this link to the Tailwind CSS website. We almost made them blue but that's so yesterday, so we went with + dark gray, feels edgier. +
+We even included table styles, check it out:
+| Wrestler | +Origin | +Finisher | +
|---|---|---|
| Bret "The Hitman" Hart | +Calgary, AB | +Sharpshooter | +
| Stone Cold Steve Austin | +Austin, TX | +Stone Cold Stunner | +
| Randy Savage | +Sarasota, FL | +Elbow Drop | +
| Vader | +Boulder, CO | +Vader Bomb | +
| Razor Ramon | +Chuluota, FL | +Razor's Edge | +
+ We also need to make sure inline code looks good, like if I wanted
+ to talk about <span> elements or tell you the
+ good news about @tailwindcss/typography.
+
code in headings
+ ​
+ + Even though it's probably a bad idea, and historically I've had a + hard time making it look good. This + "wrap the code blocks in backticks" trick works pretty well + though really. +
+
+ Another thing I've done in the past is put a code tag
+ inside of a link, like if I wanted to tell you about the
+ tailwindcss/docs
+ repository. I don't love that there is an underline below the
+ backticks but it is absolutely not worth the madness it would
+ require to avoid it.
+
h4 yet
+ ​
+
+ But now we have. Please don't use h5 or
+ h6 in your content, Medium only supports two heading
+ levels for a reason, you animals. I honestly considered using a
+ before pseudo-element to scream at you if you use an
+ h5 or h6.
+
+ We don't style them at all out of the box because
+ h4 elements are already so small that they are the same
+ size as the body copy. What are we supposed to do with an
+ h5, make it smaller than the body copy? No
+ thanks.
+
h4 elements, either.
+ ​
+ + Phew, with any luck we have styled the headings above this text and + they look pretty good. +
++ Let's add a closing paragraph here so things end with a decently + sized block of text. I can't explain why I want things to end that + way but I have to assume it's because I think things will look weird + or unbalanced if there is a heading too close to the end of the + document. +
++ What I've written here is probably long enough, but adding this + final sentence can't hurt. +
+