<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <title>#css posts — Ben Crowder</title>
    <link>https://bencrowder.net/blog/tag/css/</link>
    <atom:link href="https://bencrowder.net/blog/tag/css/feed/" rel="self" />
    <description>Feed for blog posts tagged with #css.</description>
    <lastBuildDate>Sat, 04 Apr 2026 05:22:16 GMT</lastBuildDate>
    <language>en-US</language>
    <generator>https://bencrowder.net/</generator>

    <item>
      <title>Latin declensions worksheet</title>
      <link>https://bencrowder.net/blog/2026/latin-declensions-worksheet/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2026/latin-declensions-worksheet/</guid>
      <pubDate>Sun, 01 Feb 2026 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>I’ve added a fill-in-the-blank worksheet for the <a href="https://bencrowder.net/latin-declensions/">Latin declensions chart</a>:</p>
<p><figure class="border">
        <a href="https://bencrowder.net/latin-declensions/"><img src="https://cdn.bencrowder.net/images/projects/latin-declensions-worksheet.png" alt="https://cdn.bencrowder.net/images/projects/latin-declensions-worksheet.png" title="https://cdn.bencrowder.net/images/projects/latin-declensions-worksheet.png" /></a>
        
      </figure></p>
<p>(And I have to add that the source being HTML and CSS made it incredibly easy to pick this project again after three years of not touching it.)</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Latin declensions worksheet">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Robin Rendle: I’ve always seen the browser as a printing press. Because of that, I’ve always seen my...</title>
      <link>https://bencrowder.net/blog/2023/1582/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2023/1582/</guid>
      <pubDate>Sat, 30 Sep 2023 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p><a href="https://buttondown.email/robinrendle/archive/the-browser-is-a-printing-press/">Robin Rendle</a>:</p>
<blockquote>
  <ol>
  <li>I’ve always seen the browser as a printing press.</li>
  <li>Because of that, I’ve always seen myself as a publisher first and then everything else second.</li>
  </ol>
</blockquote>
<p>This, particularly the second point. I’ve seen myself as a publisher for a long time now as well, with all the books and language charts and magazines and even the art. And the web makes publishing so, so easy. It’s magical. Instant worldwide distribution. (Well, instant for the digital things I make.)</p>
<p>His first point has stuck with me as well — I’ve tended to think of my site mostly as a place to publish PDFs and EPUBs and images and other files I’ve made, but I like the idea of the web as the actual delivery mechanism, for more than just blog posts. This isn’t a new idea, of course; it’s just something I haven’t been thinking about as much till now. I’m looking over the type of things I’ve made — books, languages charts, etc. — and thinking what it would be like if the end product were a web page instead of a PDF or an EPUB. And of course nowadays I’m using HTML/CSS as the source for all three main formats for books (web, EPUB, PDF), so it doesn’t necessarily have to be either/or.</p>
<p>Anyway, nothing specific in mind yet. We’ll see what comes of it.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Robin Rendle: I’ve always seen the browser as a printing press. Because of that, I’ve always seen my...">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Latin declensions chart update</title>
      <link>https://bencrowder.net/blog/2023/latin-declensions-chart-update-2/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2023/latin-declensions-chart-update-2/</guid>
      <pubDate>Sun, 12 Feb 2023 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>I ported my <a href="https://bencrowder.net/latin-declensions/">Latin declensions chart</a> from PlotDevice (which was Mac-only and thus not accessible to people without Macs) to <a href="https://cdn.bencrowder.net/downloads/lang/latin-declensions.html">HTML/CSS</a>.</p>
<p>Some notes:</p>
<ul>
<li>My goal with this was to make a chart that’s modifiable as easily as possible without building a full chart-generation app.</li>
<li>Because this HTML and CSS is intended for print and not at all for the responsive web, there are a few ways I did things that I probably wouldn’t have used on a web project.</li>
<li>I considered using on-page JavaScript to generate the table HTML, since right now there’s a lot of duplication, but I opted to stick with straight HTML to make it easier for non-technical people to modify.</li>
<li>The column widths are manually set so that things line up across tables. I could have done one big table instead, but the editing ergonomics would have been substantially worse.</li>
<li>Chrome still can’t print lines less than 1pt in width, so I used Firefox to export the PDF.</li>
<li>I wish custom properties worked in <code>@page</code>. I also plan to eventually refactor this so that more of the CSS is configurable via custom properties. (At this point it’s just column widths/gaps and colors.)</li>
<li>This 3.0 version of the chart changes the font from Museo Sans / Minion Pro to EB Garamond, so that the font is freely available. (EB Garamond also feels more appropriate to Latin than Museo Sans.)</li>
</ul><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Latin declensions chart update">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>A short followup to what I wrote last year about Press, my abandoned typesetting engine project: I’m...</title>
      <link>https://bencrowder.net/blog/2022/1357/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2022/1357/</guid>
      <pubDate>Mon, 14 Nov 2022 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>A short followup to <a href="https://bencrowder.net/blog/2021/865/">what I wrote last year</a> about Press, my abandoned typesetting engine project: I’m now fully convinced that the web platform is where I want to do typesetting. It’s open, programmatic, and capable. Source files are plain text, easy to version control, and fairly future-proof. And even though it’s not WYSIWYG — at least not the way I’m using it — it’s much more comfortable for me as a working environment.</p>
<p>For non-book work (charts, some kinds of documents), I’ve found that browsers already support everything I need (like <code>@page</code>). That’s how I’ve done all my recent genealogy design work, and it’s how I’ll do any language charts I make going forward. And for things like books where browser support isn’t quite there yet, Paged.js works well (and will presumably be phased out once browser support gets better).</p>
<p>Not to mention how nice it is for both print and digital workflows (EPUB, web) to all use the same technologies. I also love that the web is cross-platform. Something I ran into when I was making charts with PlotDevice (which is Mac-only) was that people on Windows couldn’t modify the charts even when I gave them the source. That’s not a problem with the web.</p>
<p>I’ve even started using the web platform for less webby things like making wallpaper for my phone:</p>
<p><figure style="width: '300px'">
        <img src="https://cdn.bencrowder.net/blog/2022/11/scripture-wallpaper.jpg" alt="Dark cloudy background with the text of Matthew 11:28 at the center." title="Dark cloudy background with the text of Matthew 11:28 at the center." />
        
      </figure></p>
<p>Here’s the HTML (the 375&times;812px size is the CSS resolution of my iPhone 12 Mini — RIP — and also keep in mind that this was for a one-off never to see the light of day, so I took the liberty of cutting a few corners):</p>
<pre>
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0, user-scalable=no&quot; /&gt;
  &lt;link rel=&quot;stylesheet&quot; href=&quot;style.css&quot; /&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div class=&quot;background&quot;&gt;
    &lt;svg id=&quot;darknoise&quot; viewBox=&quot;0 0 375 812&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
      &lt;filter id=&quot;noiseFilter&quot;&gt;
        &lt;feTurbulence baseFrequency=&quot;0.5&quot; numOctaves=&quot;8&quot; /&gt;
      &lt;/filter&gt;
      &lt;rect width=&quot;100%&quot; height=&quot;100%&quot; filter=&quot;url(#noiseFilter)&quot; /&gt;
    &lt;/svg&gt;

    &lt;svg id=&quot;lightnoise&quot; viewBox=&quot;0 0 375 812&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
      &lt;filter id=&quot;noiseFilter2&quot;&gt;
        &lt;feTurbulence seed=&quot;485&quot; baseFrequency=&quot;0.005&quot; numOctaves=&quot;12&quot; /&gt;
      &lt;/filter&gt;
      &lt;rect width=&quot;100%&quot; height=&quot;100%&quot; filter=&quot;url(#noiseFilter2)&quot; /&gt;
    &lt;/svg&gt;
  &lt;/div&gt;

  &lt;div class=&quot;quote&quot;&gt;Come unto me, all ye that labour and are heavy laden, and I will give you rest.&lt;/div&gt;

  &lt;div class=&quot;reference&quot;&gt;Matthew 11:28&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>The CSS (with the font purchased from <a href="https://www.fontshop.com/families/ff-clifford">FontShop</a>):</p>
<pre>
* {
  box-sizing: border-box;
  font-family: Clifford Pro;
}

html {
  height: 100%;
}

body {
  color: #777;
  font-size: 1.6rem;
  margin: 0;
  text-align: center;
}

.background {
  background: radial-gradient(circle at 50% 90%, #222, #111);
  bottom: 0;
  left: 0;
  position: absolute;
  right: 0;
  top: 0;
  z-index: -1;
}

.background svg#darknoise {
  bottom: 0;
  filter: saturate(0);
  left: 0;
  mix-blend-mode: multiply;
  opacity: 0.9;
  position: absolute;
  right: 0;
  top: 0;
}

.background svg#lightnoise {
  bottom: 0;
  filter: saturate(0);
  left: 0;
  mix-blend-mode: soft-light;
  opacity: 0.4;
  position: absolute;
  right: 0;
  top: 0;
}

.quote {
  line-height: 1.4;
  margin: 25rem 1.5rem 0;
}

.reference {
  color: hsl(0 40% 32%);
  font-size: 1.3rem;
  font-style: italic;
  margin-top: 1rem;
}
</pre>
<p>I then used headless Chrome to export the PNG (Firefox would probably have worked as well, though I haven’t yet tested it for this):</p>
<pre>
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --headless --disable-gpu --screenshot --window-size=375x812 index.html
</pre>
<p>It’s not the world’s most amazing wallpaper or anything, but I’m still pleased that I was able to make something I’m reasonably happy with using technologies I love. (I could have also used WebGL shaders or Canvas. Lots of options!)</p>
<p>Here’s to the open web.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20A short followup to what I wrote last year about Press, my abandoned typesetting engine project: I’m...">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Historia Calamitatum</title>
      <link>https://bencrowder.net/blog/2021/historia-calamitatum/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2021/historia-calamitatum/</guid>
      <pubDate>Fri, 05 Nov 2021 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<figure class="float right"><a href="https://bencrowder.net/historia-calamitatum/"><img src="https://cdn.bencrowder.net/images/thumbnails/historia-calamitatum.jpg" alt="Book cover for Historia Calamitatum by Peter Abelard, white text over small circles fading vertically from white at top through red in the middle down to black at the bottom" /></a></figure>
<p>After what feels like a long absence from bookmaking, I’ve gotten back into it and have a new release: <a href="https://bencrowder.net/historia-calamitatum/"><i>Historia Calamitatum</i></a>, available as a PDF.</p>
<p>The book is a medieval autobiography by <a href="https://en.wikipedia.org/wiki/Peter_Abelard">Peter Abélard</a>, a Catholic philosopher who lived in the eleventh and twelfth centuries in France.</p>
<p>Some notes on the making, for those who like that sort of thing:</p>
<ul>
<li>I used <a href="https://www.pagedjs.org/">paged.js</a> for the typesetting, so I was editing HTML and CSS files instead of wrangling InDesign or Affinity Publisher or LaTeX. It’s a different workflow, to be sure (lots of reloading in Chrome and then finding my spot again), but overall I love having the source files be plain text.</li>
<li>The line-breaking algorithm isn’t as nice as InDesign’s. Had to finagle the <code>word-spacing</code> and <code>letter-spacing</code> properties a bit to fix some more egregious spots. (At the same time, I wasn’t fixated on making the spacing perfect. Nor did I fix the hyphenation stacks, because they don’t bother me. I’m clearly becoming a bit more relaxed about typesetting rules as I get older.)</li>
<li>For the typeface I went with <a href="https://fonts.google.com/specimen/IM+Fell+DW+Pica">IM Fell DW Pica</a>, which is no doubt anachronistic but I like the feeling it gives the book.</li>
<li>I proofed the PDFs in the Documents app on my iPad. Much nicer than printing the whole thing out (which I used to do, years ago).</li>
<li>I made the cover using <a href="https://bencrowder.net/cirque/">Cirque</a> with textures applied in Affinity Photo.</li>
</ul><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Historia Calamitatum">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Links #48</title>
      <link>https://bencrowder.net/blog/2021/links-48/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2021/links-48/</guid>
      <pubDate>Wed, 15 Sep 2021 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p><a href="https://georgefrancis.dev/writing/crafting-organic-patterns-with-voronoi-tessellations/">George Francis on Voronoi tessellations in generative art</a>. Enjoyed this. Seems like a decent alternative to circle packing at least some of the time.</p>
<p><a href="https://elisehe.in/2021/08/22/using-the-platform">Elise Hein on her experience with stackless dev</a>. The minimalist in me is pretty much always interested in this angle on web development.</p>
<p><a href="https://webcomponents.dev/blog/all-the-ways-to-make-a-web-component/">WebComponents.dev on all the ways to make a web component</a>. Lots of charts. Prism and Svelte look intriguing.</p>
<p><a href="https://www.joshwcomeau.com/css/designing-shadows/">Josh Comeau on designing beautiful shadows in CSS</a>. The techniques definitely make a difference.</p>
<p><a href="https://www.behance.net/gallery/124111459/Impossible-Type">Fleta Selmani’s Escheresque impossible type</a> (via
<a href="https://kottke.org/21/09/impossible-type">Kottke</a>). Love this.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Links #48">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Links #47</title>
      <link>https://bencrowder.net/blog/2021/links-47/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2021/links-47/</guid>
      <pubDate>Mon, 06 Sep 2021 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p><a href="https://moderncss.dev/practical-uses-of-css-math-functions-calc-clamp-min-max/">Stephanie Eckles on practical uses of CSS math functions</a>. Some great examples here.</p>
<p><a href="https://mattdesl.svbtle.com/pen-plotter-1">Matt DesLauriers on pen plotter art and algorithms</a>. I keep thinking about buying or building a plotter. Someday…</p>
<p><a href="https://codepen.io/plfstr/full/zYqQeRw">Paul Foster’s HTML tags memory test</a>. Got 70.</p>
<p><a href="https://svmusicology.com/mapa/?lang=en">Sakira Ventura’s world map of female composers</a>. Love this.</p>
<p><a href="https://thoughtbot.com/blog/an-introduction-to-macos-voice-control">Eric Bailey’s introduction to macOS Voice Control</a>. Both this and Head Pointer are really quite impressive.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Links #47">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Came across Miriam Suzanne’s CSS scope proposal this morning (via Jeremy Keith). Looks good.</title>
      <link>https://bencrowder.net/blog/2021/1264/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2021/1264/</guid>
      <pubDate>Sat, 21 Aug 2021 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>Came across <a href="https://css.oddbird.net/scope/explainer/">Miriam Suzanne’s CSS scope proposal</a> this morning (via <a href="https://adactio.com/links/18386">Jeremy Keith</a>). Looks good.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Came across Miriam Suzanne’s CSS scope proposal this morning (via Jeremy Keith). Looks good.">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Lately I’ve been playing around with implementing genealogy sparklines on the web. Still very much a...</title>
      <link>https://bencrowder.net/blog/2021/1259/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2021/1259/</guid>
      <pubDate>Fri, 20 Aug 2021 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p>Lately I’ve been playing around with implementing <a href="https://bencrowder.net/blog/tag/sparklines/">genealogy sparklines</a> on the web. Still very much a work in progress, but I’m trying to do more working in public, so here’s the messy current status (and at some point I’ll post the actual HTML/CSS):</p>
<h2 id="rubytest">Ruby test</h2>
<p><figure class="border">
        <a href="https://cdn.bencrowder.net/blog/2021/08/sparkline-test-002.png"><img src="https://cdn.bencrowder.net/blog/2021/08/sparkline-test-002.png" alt="sparkline-test-002.png" title="sparkline-test-002.png" /></a>
        
      </figure></p>
<p>Implementation notes:</p>
<ul>
<li>The sparklines use inline SVG</li>
<li>This test uses the <code>&amp;lt;ruby&amp;gt;</code> and <code>&amp;lt;rt&amp;gt;</code> tags, with <code>ruby-position</code> set to <code>under</code> and <code>ruby-align</code> set to <code>start</code> (though only Firefox supports it so it’s not sadly viable for actual use yet)</li>
<li>I don’t really like that it makes the leading uneven (lines that have ruby vs. lines that don’t)</li>
</ul>
<p>Design notes:</p>
<ul>
<li>Rather than having solid squares at the births and deaths, I’ve gone for vertical lines so they’re less obtrusive (and have also considered just getting rid of the vertical lines, though I haven’t tried it out yet)</li>
<li>Circles are simple so I went with them for marriages and children</li>
</ul>
<h2 id="absolutepositioningtest">Absolute positioning test</h2>
<p><figure class="border">
        <a href="https://cdn.bencrowder.net/blog/2021/08/sparkline-test-003.png"><img src="https://cdn.bencrowder.net/blog/2021/08/sparkline-test-003.png" alt="sparkline-test-003.png" title="sparkline-test-003.png" /></a>
        
      </figure></p>
<p>Implementation notes:</p>
<ul>
<li>The names are wrapped in <code>span</code> tags with <code>position: relative</code> set, and the SVG gets <code>position: absolute</code>. Fairly simple.</li>
<li>Even leading!</li>
<li>There’s some wonkiness right now when the <code>span</code> is at the beginning of a line (the sparkline shows up at the end of the previous line), haven’t tried very hard to fix it yet</li>
</ul><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Lately I’ve been playing around with implementing genealogy sparklines on the web. Still very much a...">Reply via email</a></p>]]></description>
    </item>
    <item>
      <title>Links #45</title>
      <link>https://bencrowder.net/blog/2021/links-45/</link>
      <guid isPermaLink="true">https://bencrowder.net/blog/2021/links-45/</guid>
      <pubDate>Sat, 07 Aug 2021 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Ben Crowder]]></dc:creator>
      <description><![CDATA[<p><a href="https://thesciencemuseum.github.io/never-been-seen/index.html">The Science Museum Group’s Never Been Seen collection</a>. Fun idea. I was the first Internet person to lay eyes on <a href="https://collection.sciencemuseumgroup.org.uk/objects/co100664">this dental stopper</a>, for example.</p>
<p><a href="https://palladiummag.com/2021/05/17/why-civilization-is-older-than-we-thought/">Samo Burja on why civilization is older than we thought</a>. Göbekli Tepe, Sumeria, and more.</p>
<p><a href="https://vfoley.xyz/reasonable-use/">vfoley on making reasonable use of computer resources</a>. Data-oriented design has now snagged my curiosity. I think about this overall topic fairly often, though I still haven’t done anything about it. Also in this vein: Craig Mod’s <a href="https://craigmod.com/essays/fast_software/">essay on fast software</a>.</p>
<p><a href="https://www.robinsloan.com/notes/just-link/">Robin Sloan on having newsletters live on the web and just emailing out a link instead of the full thing</a>. My own newsletter has been sadly dormant for the past several months, but when I revive it I plan to do this.</p>
<p><a href="https://www.joshwcomeau.com/react/demystifying-styled-components/">Josh W. Comeau on how styled-components works</a>. This was good.</p><hr class="feed-extra" style="margin-top: 48pt;" /><p class="feed-extra feed-mail"><a href="mailto:ben.crowder@gmail.com?subject=Re%3A%20Links #45">Reply via email</a></p>]]></description>
    </item>
    
  </channel>
</rss>
