Ugly Duck

Articles & Essays

Personal articles, demos and occasional ramblings.
Subscribe via RSS


  1. Shiny, Animated CSS Buttons //
  2. Create a Mac App Icon with Pure HTML & CSS //
  3. The Lazy Developer's Dark Mode //
  4. Click to Load Website Images //
  5. 89 Blog Posts in a Single HTML File //
  6. Introducing PageRoast //
  7. ThriftyName: $5 Brand Names //
  8. Self-Hosting Fathom Analytics with DigitalOcean //
  9. Setting Up Fathom Analytics with Netlify //
  10. Introducing Notez //
  11. Animated Radio Tab Toggles //
  12. Disabling Comments in WordPress //
  13. Pure CSS Bar Graphs with Graceful Mobile Fallbacks //
  14. Obvious Javascript 'Injection' Fallback //
  15. Bidirectional Scrolling: Why Not Both? //
  16. Menu Toggle with Pure CSS //
  17. Poor Man's CSS Full-Bleed Layout //
  18. Simple Navigation Setup in Jekyll 3.9.0 //
  19. Portable Pi: Cheap Raspberry Pi Zero Hacker Terminal //
  20. Over-Engineering an Oil Tank Gauge //
  21. My Raspberry Pi Desktop //
  22. Linux Mint MacBook Air Setup //
  23. Goodbye WordPress, Hello Jekyll (Again) //
  24. Audio Hotkeys on Linux Mint //
  25. Improving Github’s New Design //
  26. Keynote Slides with Pure CSS //
  27. Quick & Dirty Theme Switcher //
  28. Mini Interactive Keyboard with Pure CSS //
  29. Fixing LocalWP on Fedora 32 //
  30. WP Enqueue for Beginners //
  31. Faking 3D Elements with CSS //
  32. Stripe Menu Dropdowns (CSS) //
  33. Base64 All The Things! (Sometimes) //
  34. How to "FLOSS" as a Web Designer //
  35. Web Development on a $200 Chromebook //
  36. Billing for One CSS Change //
  37. Very Basic Form Styling //
  38. Improving Tufte CSS for Jekyll //
  39. Stop Using Sticky Navigation on Mobile //
  40. Plain Text Emails, Please //
  41. Being More Efficient as a Designer & Developer //
  42. Dynamic Checkboxes //
  43. Styling Empty Table Cells //
  44. Using HTML Validator Badges Again //
  45. They Won't Wait: A Warning for Slow Websites //
  46. Publishing Simple Books With Jekyll //
  47. Using Hamburger Menus? Try Sausage Links //
  48. Making Tables Responsive With Minimal CSS //
  49. Write HTML Like It's 1999 //
  50. Using user-select //
  51. News Websites Are Dumpster Fires //
  52. Text Align: Justify //
  53. Improving receipt UX //
  54. Cut your forms in half //
  55. First letter pseudo element //
  56. Minimal CSS: Dropdown menu //
  57. CSS Character unit //
  58. Browser history sucks //
  59. Yes, I still use jQuery //
  60. CSS value: current color //
  61. CSS: Indenting text //
  62. Simple Does Not Mean Ugly //
  63. Skip to content button //
  64. Prescription form UI improvements //
  65. Animated card tiles //
  66. Easy toggle switches //
  67. Super Mario blocks in CSS //
  68. Proper UI hierarchy //
  69. Tabbed content without JavaScript //
  70. Easy custom radio inputs //
  71. Basic gulp build for Sass //
  72. Better Box Shadows //
  73. Over-nesting //
  74. Using parent selectors in CSS //
  75. Width or flex-basis? //
  76. Adaptable flexbox grid //
  77. What happened to self-hosted blogs? //
  78. Pure CSS simple dropdown plugin //
  79. Simple accessibility //
  80. Using multiple CSS background images //
  81. Setting up a free SSL //
  82. CSS video backgrounds //
  83. CSS variables //
  84. Stay hungry //
  85. Open source typeface pairings //
  86. ET-Jekyll theme //
  87. Chasing performance //
  88. The death of personality //
  89. Unsolicited design review - Dropbox //
  90. Goodbye CSS preprocessors //
  91. Designers need thicker skin //
  92. The wonders of text ellipsis //
  93. Aqua UI CSS buttons //