The archive
Showing all 183 posts.
- If Edgar Allan Poe was into Design Systems
- Web Components Are Not the Future — They’re the Present
- Component Machines
- Styling Custom Elements Without Reflecting Attributes
- Reflection and Custom States in Web Components
- Anchoring Software to Major Versions
- Building Custom Elements With a Library
- Design Systems Are An Investment
- How to File a Bug Report
- Thoughts on Framework Churn
- Better Buttons with color-mix() and Custom Properties
- Dynamic Slots
- My Commitment to Accessibility
- Converting a URL Object to a Plain Object in JavaScript
- The Term "Headless Component" is a Misnomer
- Shoelace 2.0
- Installing Shoelace in a React App
- Why You Should Prefix Custom Events
- Custom Event Names and the Bubbling Problem
- The Future of Shoelace
- A Web Component Story
- Not Everything Can Be Feature Detected
- Buttons and Cursors
- My Stance on AI-generated Code
- Design Systems Aren't Cheap
- CSS Parts Inspired by BEM
- When To Create CSS Parts
- Valid Names for CSS Parts
- Complacency on the Front End
- A Web Components Primer
- Success Requires Luck
- Flash of Undefined Custom Elements (FOUCE)
- Bulletproof Components
- Empowering Design System Users
- Exploring the EyeDropper API
- The Future of Frameworks
- Superpowers
- Know When To Draw The Line
- Don't Do Magic
- On Buttons and Links
- On Using Web Component Libraries
- Finding the Closest Element Through Shadow Roots
- Testing Support for :focus-visible
- Querying through shadow roots
- Prefers Reduced Motion
- Finding the active element in a shadow root
- Moving from Stencil to LitElement
- SVG Repo
- Archiving Postleaf
- Getting localized month and day names in the browser
- Shoelace 2.0: a forward-thinking library of web components
- Cory's amazing dot paper
- A free HTML, CSS, and JavaScript beautifier
- Let's Encrypt renews but browsers still seeing old/expired SSL certificate
- Introducing Surreal CMS 7
- Getting duplicate ids in an HTML document
- A clever way to style the <mark> element
- Opening a new window after an async operation
- Zipping multiple folders into separate zip files
- Shoelace.style — A back to the basics CSS starter kit
- Downloading a list of URLs automatically
- Surreal CMS acquires PageLime
- Rebuilding your Spotlight index in macOS
- Thoughts on AMP
- JSON Feed
- Postleaf: reimagined
- Thoughts on uploads
- Importing plain CSS files with Sass
- Determining your app's base directory in Node.js
- Hashing Passwords with Node.js and bcrypt
- Using an ORM
- Solving the search problem
- Moving to Node.js
- SSH failing on macOS Sierra
- Getting it right
- SimpleImage 3.0
- Don't hate on PHP
- Thoughts on comments
- Code can change
- A better way to write config files in PHP
- How to upgrade or downgrade Node.js using npm
- Adding and removing virtual hosts on Ubuntu 14.04
- Lessons from a failed Kickstarter
- Democratizing publishing
- Animated CSS hamburger icons
- Flushing DNS cache on macOS
- A clean fade-in effect for webpages
- How to remove box shadows from input controls on iOS
- Passing data from PHP to JavaScript
- The HTML5 download attribute
- Get comfortable with abstraction
- Thoughts on being a good manager
- I should have been asking my users this from the start
- Why developers hate being interrupted
- Social sharing buttons are ineffective
- How to use currentColor in your stylesheet
- I switched from tabs to spaces and haven't looked back
- CSS shapes are here
- CSS reset with box-sizing fix
- What can you do with a single <div>?
- Is your product the reason your startup is failing?
- Stop trying to build the next unicorn
- BrowserStack: stop using virtual machines for browser testing
- I'm taking "startup" back
- Hide the mouse cursor with CSS
- How to leave a console greeting for your visitors
- Subtle Patterns: hundreds of free backgrounds that tile
- Find a name for almost any hex color
- Working with HTML5 data attributes
- Is it possible to be an introverted entrepreneur?
- How to use the PHP ternary operator
- Five things I've learned about taking risks
- Using the classList API
- TinyPNG: A better way to compress PNG images
- What is my browser? This tool will tell you
- Smaller volume increments in macOS
- Link to a specific page in a PDF file
- Lessons from my 20s: a presentation by Ryan Allis
- How to get the dominant colors of an image with Color Thief
- PlayCanvas: an easy, open source WebGL game engine
- box-sizing: border-box explained
- Give your JPEGs alpha channels
- How to get faster and better help from support
- Swapping variables with JavaScript
- The next version of PHP may very well be 7
- SVG has a logo
- A user interface is like a joke
- Parsing URLs in JavaScript
- An icon converter that supports multiple sizes and transparency
- Validating URLs and email addresses in PHP
- Semantic version numbers
- There's a reason that Bootstrap 3 has ugly buttons
- Whipping file inputs into shape with Bootstrap
- Tips for the aspiring web developer
- Down with the share widget!
- Feature detection for CSS transitions via jQuery $.support
- Access pages without the php extension using .htaccess
- Detecting mobile devices with JavaScript
- Redirecting to and from the www subdomain with .htaccess
- The SimpleImage library for PHP
- How to delete a tag on GitHub
- Office 2007 files downloading as ZIP files in Internet Explorer
- Smoothly scroll to an element without a jQuery plugin
- The difference between web designers and web developers
- New shortcut keys in Windows 7
- Icon Finder: an awesome search engine for icons
- JSNES: a Nintendo emulator built in JavaScript
- Table cells and max-widths in Internet Explorer 8
- Browser makers: where’s the new tab + homepage option?
- What happens if IE8 "breaks" my website?
- Images display in Firefox and Safari, but not in Internet Explorer
- PHP functions to get and remove the file extension from a string
- Prevent white noise from appearing in images after fading
- A Beautiful Site becomes "A Beautiful Site, LLC"
- Import/restore MySQL files from the command line
- Parsing a JSON string results in an 'Invalid Label' error
- $.postJSON() for jQuery
- Generate random passwords in PHP
- Fetching remote web pages with curl and PHP
- Determine file extensions using JavaScript
- But we haven't even mastered Acid2!
- Netscape support ending in February 2008
- IE8 burns the Acid 2 test
- Select all, select none, and invert selection with jQuery
- External popup links using jQuery
- Convert arrays to CSV with PHP
- Getting proportionally-resized dimensions of an image
- JavaScript functions for basename and dirname
- Avoiding timestamp errors when calculating dates in php
- DaFont: an excellent free font resource
- Forcing file downloads in PHP
- Web standards are just "minor details"
- Creating stylesheets for handheld devices
- Creating a printable website using print stylesheets
- CSS drop caps
- Find and replace hyperlinks and email addresses in PHP
- What are favicons?
- Using JavaScript to prevent comment spam
- Password protection using .htaccess and .htpasswd
- GIF, JPEG or PNG? Using images on the web
- Business cards
- An Event Apart, Boston
- A Beautiful Site launched
Feeds available in Atom & JSON
You can also browse by tag or press / to search.