<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Matt Kreiling</title>
    <description>The latest articles on DEV Community by Matt Kreiling (@tinynow).</description>
    <link>https://dev.to/tinynow</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F62412%2F2432ae36-7e51-4fc2-92dd-7c40d0889d70.jpg</url>
      <title>DEV Community: Matt Kreiling</title>
      <link>https://dev.to/tinynow</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tinynow"/>
    <language>en</language>
    <item>
      <title>CSS Only COVID-19 Dashboard Dial</title>
      <dc:creator>Matt Kreiling</dc:creator>
      <pubDate>Thu, 21 May 2020 03:16:05 +0000</pubDate>
      <link>https://dev.to/tinynow/css-only-covid-19-dashboard-dial-2892</link>
      <guid>https://dev.to/tinynow/css-only-covid-19-dashboard-dial-2892</guid>
      <description>&lt;p&gt;In Washington State where I live, the governor's office is making decisions about reopening on a number of metrics. These metrics are grouped together in a &lt;a href="https://coronavirus.wa.gov/what-you-need-know/covid-19-risk-assessment-dashboard"&gt;dial dashboard&lt;/a&gt; where each dial represents the risk level for a particular set of metrics.&lt;/p&gt;

&lt;p&gt;I decided to make one with CSS only.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SJ-1nuN5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ivznkbltx4x22tbz2xat.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SJ-1nuN5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ivznkbltx4x22tbz2xat.png" alt="A dial pointing at an arc that is labeled low risk and high risk"&gt;&lt;/a&gt;&lt;/p&gt;
The original image.



&lt;p&gt;I was kind of surprised how quickly I made this. Apparently 10 years of loving CSS has paid off. Here are some observations about the process.&lt;/p&gt;
&lt;h2&gt;
  
  
  Semantic HTML and accessibility first
&lt;/h2&gt;

&lt;p&gt;I am proud that without thinking, I immediately sought out an appropriate semantic element for the dial - the &lt;code&gt;meter&lt;/code&gt; element.&lt;/p&gt;

&lt;p&gt;Because of the many problems with styling it, I opted to hide it using a tool that should be in every web dev's toolbox, the CSS clip, screen-reader only hack. This code will hide an element from sighted users, but keep it available for assistive technology.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.sr-only&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;clip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1px&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;clip-path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;inset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;50%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;-1px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;overflow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;hidden&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;In this case, I used it to hide the meter and to hide a more sensical label.&lt;/p&gt;

&lt;p&gt;I also used &lt;code&gt;aria-hidden&lt;/code&gt; to hide the less helpful "Low Risk High Risk" text.&lt;/p&gt;

&lt;p&gt;Even though this was just a fun CSS exercise, it feels good to care!&lt;/p&gt;

&lt;h3&gt;
  
  
  Knowing when to add HTML to help with styling
&lt;/h3&gt;

&lt;p&gt;This is a particular virtue that I have came upon lately. In the past, I tried to use as few HTML elements as possible, keeping the DOM tree flat. I was a hypochondriac and avoid "divitis" like the plague. The separation of content and presentation was a holy command.&lt;/p&gt;

&lt;p&gt;Over the years, I have spent countless hours and used pseudo-elements to do all sorts of obscene things rather than add an empty div to the page.&lt;/p&gt;

&lt;p&gt;Now, I still reach for those pseudo-elements, but when things become fragile, I will add a &lt;code&gt;div&lt;/code&gt; or two.&lt;/p&gt;

&lt;p&gt;Don't get me wrong, meaningless &lt;code&gt;div&lt;/code&gt;s aren't great, but neither is inscrutable CSS.&lt;/p&gt;

&lt;h2&gt;
  
  
  The CSS triangle hack
&lt;/h2&gt;

&lt;p&gt;The pointer on the dial is made of two transparent pseudo-elements with fat borders that are also transparent on two sides. As with most of these kinds of hacks, I used a tool to generate some CSS and tweaked the values until they were correct.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gradient tools
&lt;/h2&gt;

&lt;p&gt;I have use old school &lt;a href="https://www.colorzilla.com/gradient-editor/"&gt;Colorzilla's gradient generator&lt;/a&gt; for years, but I discovered a slightly slicker generator at &lt;a href="https://cssgradient.io/"&gt;css-gradient.io&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Attribute, sibling selectors, and &lt;code&gt;calc&lt;/code&gt;, and CSS variables&lt;sup&gt;1&lt;/sup&gt; to sync presentation with content
&lt;/h2&gt;

&lt;p&gt;This is probably the fanciest thing I did. In order to rotate the dial in sync with the value of the &lt;code&gt;meter&lt;/code&gt; element, I used this combination of awesome CSS features.&lt;/p&gt;

&lt;p&gt;In the dial css, I added a &lt;code&gt;rotateZ&lt;/code&gt; transform with a &lt;code&gt;calc&lt;/code&gt; function that uses a the value of a CSS variable to compute the rotation. Turn is a great unit to use with with rotate transforms.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;transform&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;rotateZ&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;calc&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;var&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;--turn&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nc"&gt;.05turn&lt;/span&gt; &lt;span class="nt"&gt;-&lt;/span&gt; &lt;span class="nc"&gt;.25turn&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The CSS variables are set in rules that target the &lt;code&gt;value&lt;/code&gt; attribute of the meter. Cool thing about&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;meter&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"1"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="nc"&gt;.dashboard-meter__container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;--turn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;meter&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"2"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="nc"&gt;.dashboard-meter__container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;--turn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;meter&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"3"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="nc"&gt;.dashboard-meter__container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;--turn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;meter&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"4"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="nc"&gt;.dashboard-meter__container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;--turn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;meter&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"5"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="nc"&gt;.dashboard-meter__container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;--turn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;meter&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"6"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="nc"&gt;.dashboard-meter__container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;--turn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;meter&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"7"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="nc"&gt;.dashboard-meter__container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;--turn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;7&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;meter&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"8"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="nc"&gt;.dashboard-meter__container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;--turn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;meter&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"9"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="nc"&gt;.dashboard-meter__container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;--turn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;9&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Google-Fu
&lt;/h2&gt;

&lt;p&gt;My google-fu is so strong I just used google to spell google-fu. Really, it is usually duck-duck-go-fu, which sounds delicious.&lt;/p&gt;

&lt;p&gt;Bad jokes aside, going to the docs or the countless web development blogs and getting the answers is a cybernetic enhancement that may be more valuable than any other skill. I look up things I know that I don't want to have to remember&lt;/p&gt;

&lt;h2&gt;
  
  
  The code
&lt;/h2&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/tinynow/embed/QWjzRRP?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;small id="footnote1"&gt;1. I know they are called custom properties, but I'm not going to do that anymore; just because they are declared the same way that other properties are set, it isn't worth the cognitive load and confusion it causes learners.&lt;/small&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>covid19</category>
      <category>cssvariables</category>
    </item>
    <item>
      <title>CSS drop-shadow() Function</title>
      <dc:creator>Matt Kreiling</dc:creator>
      <pubDate>Thu, 07 May 2020 03:34:54 +0000</pubDate>
      <link>https://dev.to/tinynow/css-drop-shadow-function-41p</link>
      <guid>https://dev.to/tinynow/css-drop-shadow-function-41p</guid>
      <description>&lt;p&gt;I was working on a little animation of my logo - the can and cloud. On hover, a parade of clouds slide in front of a can - really just the same cloud in a marquee style animation that uses a &lt;code&gt;translateX()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Since it was floating in front of the can, it would be nice to have a little shadow to complete the illusion.&lt;/p&gt;

&lt;p&gt;But you can't put a &lt;code&gt;box-shadow&lt;/code&gt; on a SVG path.&lt;/p&gt;

&lt;p&gt;I was sad, because I thought I was going to have to use some crazy verbose thing inside SVG.  I always prefer to control things with CSS and to keep markup semantic and sparse as possible. CSS is for presentation! I didn't wanna have to add this obscenity to the nice and tiny SVG code.&lt;/p&gt;

&lt;h2&gt;
  
  
  For the love of God, don't make me code this!
&lt;/h2&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight xml"&gt;&lt;code&gt;
&lt;span class="nt"&gt;&amp;lt;filter&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"dropshadow"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"130%"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;feGaussianBlur&lt;/span&gt; &lt;span class="na"&gt;in=&lt;/span&gt;&lt;span class="s"&gt;"SourceAlpha"&lt;/span&gt; &lt;span class="na"&gt;stdDeviation=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!-- stdDeviation is how much to blur --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;feOffset&lt;/span&gt; &lt;span class="na"&gt;dx=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt; &lt;span class="na"&gt;dy=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt; &lt;span class="na"&gt;result=&lt;/span&gt;&lt;span class="s"&gt;"offsetblur"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!-- how much to offset --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;feComponentTransfer&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;feFuncA&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"linear"&lt;/span&gt; &lt;span class="na"&gt;slope=&lt;/span&gt;&lt;span class="s"&gt;"0.5"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!-- slope is the opacity of the shadow --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/feComponentTransfer&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;feMerge&amp;gt;&lt;/span&gt; 
    &lt;span class="nt"&gt;&amp;lt;feMergeNode/&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!-- this contains the offset blurred image --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;feMergeNode&lt;/span&gt; &lt;span class="na"&gt;in=&lt;/span&gt;&lt;span class="s"&gt;"SourceGraphic"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!-- this contains the element that the filter is applied to --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/feMerge&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/filter&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;circle&lt;/span&gt; &lt;span class="na"&gt;r=&lt;/span&gt;&lt;span class="s"&gt;"10"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"filter:url(#dropshadow)"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Always read the second answer on Stack Overflow
&lt;/h2&gt;

&lt;p&gt;Thank goodness I know how to scroll, and hence &lt;a href="https://stackoverflow.com/questions/6088409/svg-drop-shadow-using-css3"&gt;discover the dear, dear CSS &lt;code&gt;drop-shadow&lt;/code&gt; function&lt;/a&gt;. It is actually a value of the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/filter"&gt;CSS &lt;code&gt;filter&lt;/code&gt; property&lt;/a&gt;, which has been &lt;a href="https://caniuse.com/#feat=css-filters"&gt;widely supported&lt;/a&gt; for five years.&lt;/p&gt;

&lt;p&gt;Here is how you use it.  Works just like box-shadow, except it does not support the spread value - only blur.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;filter&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;drop-shadow&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt; &lt;span class="nt"&gt;3px&lt;/span&gt; &lt;span class="nt"&gt;3px&lt;/span&gt; &lt;span class="nt"&gt;2px&lt;/span&gt; &lt;span class="nt"&gt;rgba&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.7&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/tinynow/embed/mdeXKoB?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>todayilearned</category>
    </item>
    <item>
      <title>Getting back on the web</title>
      <dc:creator>Matt Kreiling</dc:creator>
      <pubDate>Sat, 02 May 2020 20:43:51 +0000</pubDate>
      <link>https://dev.to/tinynow/getting-back-on-the-web-3e03</link>
      <guid>https://dev.to/tinynow/getting-back-on-the-web-3e03</guid>
      <description>&lt;p&gt;At 44 years old, after 11 years of web development, 9 as a paid professional, I found myself without so much as a blog post, much less a portfolio site to my name. Despite my mastery over many aspects of this craft, &lt;strong&gt;I just could not self-promote&lt;/strong&gt;. Worse, the combination of impostor syndrome, perfectionism, rebelliousness, and plain old fear had me obsessing about what I &lt;strong&gt;should&lt;/strong&gt; be doing, was preventing me from writing at all.&lt;/p&gt;

&lt;p&gt;My todo list, as it migrated from Omnifocus to Todoist to a dot-grid notebook, could never free itself "Build portfolio site" task. It sucked all the air out of me. Often, I would want to do some coding for fun, but I ended up opening the most recent portfolio directory. I would refactor something. I would start again with a new technology in a new directory. &lt;/p&gt;

&lt;p&gt;I had added analysis paralysis to the situation. I had no idea how to describe myself, what colors to use, static or dynamic, what kind of backend or CMS, what case studies or work experiences to write about, or where to start. I felt like I didn't even have anything to show. I jumped between new side projects or dusted off abandoned ones, trying to make them good enough to put out there.&lt;/p&gt;

&lt;p&gt;I wasn't writing and I wasn't shipping. I wasn't really having fun. I kept feeling paralyzed about the portfolio I should be building. As a friend often says, &lt;em&gt;I was shoulding all over myself&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Don't should on me
&lt;/h2&gt;

&lt;p&gt;To be fair to myself, I hadn't stopped learning. I did excellent work at my day job and the constant fiddling with projects had accumulated a strong start to a personal design system. I had become if not expert, highly proficient at accessible development, CSS, content strategy, design systems, Vue, leading meetings and guiding group efforts, and writing elegant and readable code.&lt;/p&gt;

&lt;p&gt;But I had lost something. Something was missing that drew me to the web in the first place. It wasn't about my portfolio. It wasn't about putting myself out there. I was missing the joy I had at putting &lt;em&gt;my stuff&lt;/em&gt; out there. Look what I made! The product of my play as much as my work. As someone who studied and taught the craft of writing, the web was first a place to present words. So add to the list a sense of unfulfilled potential and a fear that fun things are just not going to be fun anymore.&lt;/p&gt;

&lt;p&gt;It was time to stop. I'd dealt with procrastination and fear. I'd changed bad habits. I could do it again. It might be fun.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start
&lt;/h2&gt;

&lt;p&gt;At 44 years and 3 weeks old, I pushed some code up to &lt;a href="https://matt-kreiling.website"&gt;matt-kreiling.website&lt;/a&gt;. Along with a &lt;a href="https://matt-kreiling.website/#/palette"&gt;tool for generating accessible color combinations&lt;/a&gt; from a set of colors, I added a home page with a few paragraphs about me and the site.&lt;/p&gt;

&lt;p&gt;It feels good to be back.&lt;/p&gt;

</description>
      <category>impostorsyndrome</category>
      <category>middleagedev</category>
    </item>
  </channel>
</rss>
