<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>css-base on Socle</title><link>https://socle.uncinq.dev/docs/css-base/</link><description>Recent content in css-base on Socle</description><generator>Hugo</generator><language>en</language><atom:link href="https://socle.uncinq.dev/docs/css-base/index.xml" rel="self" type="application/rss+xml"/><item><title>Cascade layers</title><link>https://socle.uncinq.dev/docs/css-base/cascade-layers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://socle.uncinq.dev/docs/css-base/cascade-layers/</guid><description>&lt;p&gt;css-base scopes every rule it ships to one of three cascade layers it owns.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Layer&lt;/th&gt;
 &lt;th&gt;Contents&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;@layer reset&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;The CSS reset, the foundational baseline&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;@layer base&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Native element styles&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;@layer layouts&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Layout primitives&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Custom media queries in &lt;code&gt;css/mediaqueries.css&lt;/code&gt; are the exception: &lt;code&gt;@custom-media&lt;/code&gt; is resolved at build time, so it is never subject to the cascade and sits outside any layer.&lt;/p&gt;
&lt;h2 id="declare-the-order-in-your-project"&gt;Declare the order in your project&lt;/h2&gt;
&lt;p&gt;The full layer order, including layers owned by sibling packages (&lt;code&gt;tokens&lt;/code&gt;, &lt;code&gt;components&lt;/code&gt;) and by the project itself (&lt;code&gt;libs&lt;/code&gt;, &lt;code&gt;vendors&lt;/code&gt;, &lt;code&gt;pages&lt;/code&gt;, &lt;code&gt;utilities&lt;/code&gt;), belongs to the &lt;strong&gt;consuming project&lt;/strong&gt;. css-base deliberately does not declare it.&lt;/p&gt;</description></item><item><title>Reset</title><link>https://socle.uncinq.dev/docs/css-base/reset/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://socle.uncinq.dev/docs/css-base/reset/</guid><description>&lt;p&gt;&lt;code&gt;css/reset.css&lt;/code&gt; is a single file scoped to &lt;code&gt;@layer reset&lt;/code&gt;. It is based on the &lt;a href="https://www.joshwcomeau.com/css/custom-css-reset/"&gt;Josh W Comeau custom CSS reset&lt;/a&gt;, with a few additions by Un Cinq.&lt;/p&gt;
&lt;p&gt;Being the first layer in the recommended order, everything here is the weakest thing in the stylesheet. Any base, layout or component rule overrides it without needing extra specificity.&lt;/p&gt;
&lt;h2 id="what-it-does"&gt;What it does&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Rule&lt;/th&gt;
 &lt;th&gt;Effect&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;box-sizing: border-box&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Applied to every element and pseudo-element&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;margin: 0&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Removed from everything except &lt;code&gt;dialog&lt;/code&gt;, whose centering depends on its own margin&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;interpolate-size: allow-keywords&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Enables animating to and from &lt;code&gt;auto&lt;/code&gt;, &lt;code&gt;min-content&lt;/code&gt; and friends. Applied only under &lt;code&gt;prefers-reduced-motion: no-preference&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Text rendering on &lt;code&gt;body&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;-webkit-font-smoothing: antialiased&lt;/code&gt;, &lt;code&gt;-moz-osx-font-smoothing: grayscale&lt;/code&gt;, &lt;code&gt;text-rendering: optimizelegibility&lt;/code&gt;, &lt;code&gt;font-variant-ligatures: common-ligatures&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Media defaults&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;display: block&lt;/code&gt; and &lt;code&gt;max-width: 100%&lt;/code&gt; on &lt;code&gt;img&lt;/code&gt;, &lt;code&gt;picture&lt;/code&gt;, &lt;code&gt;video&lt;/code&gt;, &lt;code&gt;canvas&lt;/code&gt;, &lt;code&gt;svg&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Form control fonts&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;font: inherit&lt;/code&gt; on &lt;code&gt;input&lt;/code&gt;, &lt;code&gt;button&lt;/code&gt;, &lt;code&gt;textarea&lt;/code&gt;, &lt;code&gt;select&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Overflow&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;overflow-wrap: break-word&lt;/code&gt; on &lt;code&gt;p&lt;/code&gt; and &lt;code&gt;h1&lt;/code&gt; to &lt;code&gt;h6&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Line wrapping&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;text-wrap: pretty&lt;/code&gt; on &lt;code&gt;p&lt;/code&gt;, &lt;code&gt;text-wrap: balance&lt;/code&gt; on &lt;code&gt;h1&lt;/code&gt; to &lt;code&gt;h6&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="deviations-from-the-original-reset"&gt;Deviations from the original reset&lt;/h2&gt;
&lt;p&gt;Two rules from the upstream reset are present but commented out, on purpose.&lt;/p&gt;</description></item><item><title>Base</title><link>https://socle.uncinq.dev/docs/css-base/base/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://socle.uncinq.dev/docs/css-base/base/</guid><description>&lt;p&gt;&lt;code&gt;@layer base&lt;/code&gt; styles native HTML elements so that unstyled markup already looks right. There is no class to apply: write &lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;blockquote&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;input type=&amp;quot;date&amp;quot;&amp;gt;&lt;/code&gt; and they are styled.&lt;/p&gt;
&lt;p&gt;Every value comes from a custom property resolved by &lt;a href="https://github.com/uncinq/design-tokens"&gt;@uncinq/design-tokens&lt;/a&gt; and &lt;a href="https://github.com/uncinq/component-tokens"&gt;@uncinq/component-tokens&lt;/a&gt;. This package hardcodes almost nothing, so restyling is a matter of changing a token, not overriding a rule.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;css/base.css&lt;/code&gt; imports all 23 files below.&lt;/p&gt;
&lt;h2 id="typography-and-text"&gt;Typography and text&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;File&lt;/th&gt;
 &lt;th&gt;Selectors&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;base/body.css&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;body&lt;/code&gt;: background, text color, font family, size, weight, line-height&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;base/headings.css&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;h1&lt;/code&gt; to &lt;code&gt;h6&lt;/code&gt;: color, font family, weight, letter-spacing, line-height, margin, plus a per-level size from &lt;code&gt;--font-size-heading-01&lt;/code&gt; to &lt;code&gt;-06&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;base/typography.css&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;p&lt;/code&gt;: block spacing and &lt;code&gt;--max-width-paragraph&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;base/link.css&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;a&lt;/code&gt;: color, underline offset, thickness and color, hover transition, focus-visible outline&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;base/blockquote.css&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;blockquote&lt;/code&gt;, &lt;code&gt;blockquote cite&lt;/code&gt;: inline-start border, italic, muted cite block&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;base/list.css&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;ul&lt;/code&gt;, &lt;code&gt;ol&lt;/code&gt;, &lt;code&gt;li&lt;/code&gt; in prose context, including nested list indentation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;base/code.css&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;code&lt;/code&gt;, &lt;code&gt;kbd&lt;/code&gt;, &lt;code&gt;samp&lt;/code&gt;, &lt;code&gt;pre&lt;/code&gt;, and inline &lt;code&gt;code&lt;/code&gt; outside &lt;code&gt;pre&lt;/code&gt; styled separately from block code&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;base/address.css&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;address&lt;/code&gt;: removes the UA italic and resets inner paragraph spacing&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;base/abbr.css&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;abbr[title]&lt;/code&gt;: dotted underline with its own offset and thickness&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;base/sup.css&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;sup&lt;/code&gt;: raised without growing the line box, see the note below&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="media-and-embedded-content"&gt;Media and embedded content&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;File&lt;/th&gt;
 &lt;th&gt;Selectors&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;base/figure.css&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;figure&lt;/code&gt;, &lt;code&gt;figcaption&lt;/code&gt;, and nested &lt;code&gt;picture&lt;/code&gt;, &lt;code&gt;img&lt;/code&gt;, &lt;code&gt;.credit&lt;/code&gt;. Flex column layout with responsive caption direction&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;base/picture.css&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;picture&lt;/code&gt;: &lt;code&gt;inline-block&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;base/video.css&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;video&lt;/code&gt;: fluid width, auto height&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;base/table.css&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;table&lt;/code&gt;, &lt;code&gt;thead&lt;/code&gt;, &lt;code&gt;tbody&lt;/code&gt;, &lt;code&gt;th&lt;/code&gt;, &lt;code&gt;td&lt;/code&gt;: collapsed borders, cell padding, header weight, no border on the last row&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;base/details.css&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;details&lt;/code&gt;, &lt;code&gt;summary&lt;/code&gt;, &lt;code&gt;details[open]&lt;/code&gt;, the &lt;code&gt;summary::after&lt;/code&gt; marker and the disclosed panel&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="forms"&gt;Forms&lt;/h2&gt;
&lt;p&gt;Six of these seven files are largely inspired by &lt;a href="https://knacss.com/"&gt;KNACSS&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Layouts</title><link>https://socle.uncinq.dev/docs/css-base/layouts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://socle.uncinq.dev/docs/css-base/layouts/</guid><description>&lt;p&gt;&lt;code&gt;@layer layouts&lt;/code&gt; ships three primitives. They are deliberately few: everything else is a component&amp;rsquo;s job.&lt;/p&gt;
&lt;p&gt;All three read the responsive column count and gutter from tokens, so a project changes its grid by changing tokens rather than by rewriting layout rules.&lt;/p&gt;
&lt;h2 id="container"&gt;&lt;code&gt;.container&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;A centered wrapper with a responsive max-width and a gutter on both sides.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&amp;gt;...&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Property read&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--container-max-width-*&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Max-width per breakpoint rung&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--container-bleed-*&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Bleed allowance per rung, the paired token&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--gutter&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Inline padding&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;It also &lt;strong&gt;publishes&lt;/strong&gt; one property of its own, &lt;code&gt;--container-bleed&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Media queries</title><link>https://socle.uncinq.dev/docs/css-base/mediaqueries/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://socle.uncinq.dev/docs/css-base/mediaqueries/</guid><description>&lt;p&gt;&lt;code&gt;css/mediaqueries.css&lt;/code&gt; declares the breakpoint scale as &lt;code&gt;@custom-media&lt;/code&gt; rules. It is imported first by &lt;code&gt;css/index.css&lt;/code&gt; and sits outside any cascade layer, because &lt;code&gt;@custom-media&lt;/code&gt; is resolved at build time and is never subject to the cascade.&lt;/p&gt;
&lt;h2 id="the-scale"&gt;The scale&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Custom media&lt;/th&gt;
 &lt;th&gt;Min width&lt;/th&gt;
 &lt;th&gt;Pixels at 16px root&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--sm&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;48rem&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;768&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--md&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;64rem&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;1024&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--lg&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;90rem&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;1440&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--xl&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;100rem&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;1600&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;.&lt;span style="color:#a6e22e"&gt;thing&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;@media&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;(--md)&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;display&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;grid&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;These are rungs on a ladder, not devices. A width tells you nothing about the hardware: a 1024px window on a 27 inch monitor is not a tablet. Naming the steps after devices is also what left the previous scale with a compound name, &lt;code&gt;--tablet-wide&lt;/code&gt;, which belongs to no device at all.&lt;/p&gt;</description></item></channel></rss>