# HTML5 and CSS3 tricks

Web development techniques that use HTML5 markup and CSS styling features to build and present web pages.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Why regex isn't email validation

DevFeed: [Why regex isn't email validation](<https://devfeed.tech/articles/why-regex-isn-t-email-validation-16072.md>)

Original publisher: [Read original article](<https://workos.com/blog/why-regex-isnt-email-validation>)

Author: WorkOS

Published: 2026-08-24T00:00:00Z

Content type: article

Language: en

Sources: [WorkOS Blog](<https://devfeed.tech/sources/workos-blog.md>)

Topics: [Parsing](<https://devfeed.tech/topics/parsing.md>), [Forms](<https://devfeed.tech/topics/forms.md>), [HTML5 and CSS3 tricks](<https://devfeed.tech/topics/html5-and-css3-tricks.md>), [Library](<https://devfeed.tech/topics/library.md>), [Internet](<https://devfeed.tech/topics/internet.md>)

Tags: [advice](<https://devfeed.tech/tags/advice.md>), [deliverability](<https://devfeed.tech/tags/deliverability.md>), [domain](<https://devfeed.tech/tags/domain.md>), [email](<https://devfeed.tech/tags/email.md>), [forms](<https://devfeed.tech/tags/forms.md>), [framework](<https://devfeed.tech/tags/framework.md>), [html5](<https://devfeed.tech/tags/html5.md>), [internet](<https://devfeed.tech/tags/internet.md>), [library](<https://devfeed.tech/tags/library.md>), [regex](<https://devfeed.tech/tags/regex.md>), [validation](<https://devfeed.tech/tags/validation.md>)

### AI overview

The article explains that email syntax validation with regexes, HTML5 checks, or framework libraries does not establish deliverability or confirm that a mailbox exists. It recommends a loose syntax check and stopping there, while recognizing that stronger checks address separate, less reliable questions.

### Source excerpt

Checking that an address looks right and checking that it can receive mail are different problems. Most signup forms only solve the first one.

## One-Shot Any Web App with Gradio's gr.HTML

DevFeed: [One-Shot Any Web App with Gradio's gr.HTML](<https://devfeed.tech/articles/one-shot-any-web-app-with-gradio-s-gr-html-7227.md>)

Original publisher: [Read original article](<https://huggingface.co/blog/gradio-html-one-shot-apps>)

Author: yuvraj sharma; hysts; Freddy Boulton

Published: 2026-02-18T00:00:00Z

Content type: article

Language: en

Sources: [Hugging Face - Blog](<https://devfeed.tech/sources/hugging-face-blog.md>)

Topics: [web applications](<https://devfeed.tech/topics/web-applications.md>), [modern web development](<https://devfeed.tech/topics/modern-web-development.md>), [HTML5 and CSS3 tricks](<https://devfeed.tech/topics/html5-and-css3-tricks.md>), [React UI animations](<https://devfeed.tech/topics/react-ui-animations.md>)

Tags: [3d](<https://devfeed.tech/tags/3d.md>), [app](<https://devfeed.tech/tags/app.md>), [artificial-intelligence](<https://devfeed.tech/tags/artificial-intelligence.md>), [claude](<https://devfeed.tech/tags/claude.md>), [community](<https://devfeed.tech/tags/community.md>), [css](<https://devfeed.tech/tags/css.md>), [gradio](<https://devfeed.tech/tags/gradio.md>), [html](<https://devfeed.tech/tags/html.md>), [html5](<https://devfeed.tech/tags/html5.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [object-detection](<https://devfeed.tech/tags/object-detection.md>), [python](<https://devfeed.tech/tags/python.md>), [react](<https://devfeed.tech/tags/react.md>), [spaces](<https://devfeed.tech/tags/spaces.md>), [speech](<https://devfeed.tech/tags/speech.md>), [three-js](<https://devfeed.tech/tags/three-js.md>), [transcription](<https://devfeed.tech/tags/transcription.md>), [vibe-coding](<https://devfeed.tech/tags/vibe-coding.md>)

### AI overview

The article shows how Gradio's gr.HTML can create interactive, single-file Python web apps without a separate frontend build step. Examples include timers, a kanban board, visual ML result viewers, 3D controls, and live speech transcription.

### Source excerpt

We're on a journey to advance and democratize artificial intelligence through open source and open science.

## Python 3.12.12, 3.11.14, 3.10.19 and 3.9.24 are now available!

DevFeed: [Python 3.12.12, 3.11.14, 3.10.19 and 3.9.24 are now available!](<https://devfeed.tech/articles/python-3-12-12-3-11-14-3-10-19-and-3-9-24-are-now-available-2376.md>)

Original publisher: [Read original article](<https://blog.python.org/2025/10/python-31212-31114-31019-and-3924-are/>)

Author: Thomas Wouters

Published: 2025-10-09T00:00:00Z

Content type: release

Language: en

Sources: [Python Insider](<https://devfeed.tech/sources/python-insider.md>)

Topics: [releases](<https://devfeed.tech/topics/releases.md>), [HTML5 and CSS3 tricks](<https://devfeed.tech/topics/html5-and-css3-tricks.md>)

Tags: [complexity](<https://devfeed.tech/tags/complexity.md>), [html5](<https://devfeed.tech/tags/html5.md>), [python](<https://devfeed.tech/tags/python.md>), [python-3-10](<https://devfeed.tech/tags/python-3-10.md>), [release](<https://devfeed.tech/tags/release.md>), [releases](<https://devfeed.tech/tags/releases.md>), [security](<https://devfeed.tech/tags/security.md>)

### AI overview

Python 3.12.12, 3.11.14, 3.10.19, and 3.9.24 are security releases. The supplied notes cover libexpat and setuptools updates, ZIP validation, and HTML parsing fixes.

### Source excerpt

[](https://discuss.python.org/t/python-3-12-12-3-11-14-3-10-19-and-3-9-24-are-now-available/104273#p-273973-old-timer-release-party-1)Old-timer Release Party...

## Sass Pixel Art

DevFeed: [Sass Pixel Art](<https://devfeed.tech/articles/sass-pixel-art-28836.md>)

Original publisher: [Read original article](<https://una.im/sass-pixel-art/>)

Published: 2015-05-03T00:00:00Z

Content type: tutorial

Language: en

Sources: [Una Kravets](<https://devfeed.tech/sources/una-kravets.md>)

Topics: [Sass](<https://devfeed.tech/topics/sass.md>), [HTML5 and CSS3 tricks](<https://devfeed.tech/topics/html5-and-css3-tricks.md>), [pixel](<https://devfeed.tech/topics/pixel.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [blog-post](<https://devfeed.tech/tags/blog-post.md>), [css3](<https://devfeed.tech/tags/css3.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [pixel-art](<https://devfeed.tech/tags/pixel-art.md>), [sass](<https://devfeed.tech/tags/sass.md>)

### AI overview

This tutorial explains how Sass lists, matrices, maps, and list functions can generate pixel art using CSS3 multiple box shadows. It examines how individually positioned box shadows form pixels and how Sass data structures organize them.

### Source excerpt

Pixel art is so much fun! This blog post walks through how to read a matrix-like list with Sass and generate Mario pixel art from box shadows.

## Building Year in Review 2014 with SVG and Rails

DevFeed: [Building Year in Review 2014 with SVG and Rails](<https://devfeed.tech/articles/building-year-in-review-2014-with-svg-and-rails-1336.md>)

Original publisher: [Read original article](<https://shopify.engineering/building-year-in-review-2014-with-svg-and-rails>)

Author: Tessa Thornton

Published: 2015-02-11T14:43:00Z

Content type: tutorial

Language: en

Sources: [Shopify Engineering](<https://devfeed.tech/sources/shopify-engineering.md>), [Shopify Engineering - Shopify Engineering](<https://devfeed.tech/sources/shopify-engineering-shopify-engineering.md>)

Topics: [modern web development](<https://devfeed.tech/topics/modern-web-development.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>), [interactive website](<https://devfeed.tech/topics/interactive-website.md>), [HTML5 and CSS3 tricks](<https://devfeed.tech/topics/html5-and-css3-tricks.md>)

Tags: [css](<https://devfeed.tech/tags/css.md>), [data](<https://devfeed.tech/tags/data.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [shopify](<https://devfeed.tech/tags/shopify.md>), [svg](<https://devfeed.tech/tags/svg.md>), [web-graphics](<https://devfeed.tech/tags/web-graphics.md>), [year-in-review](<https://devfeed.tech/tags/year-in-review.md>)

### AI overview

A tutorial on building Shopify's Year in Review with SVG, JavaScript, Rails helpers, and d3.js. It explains why SVG suited the project's graphics and animations, including data visualizations and scroll-driven path drawing.

### Source excerpt

As we have for the past 3 years, Shopify released a Year in Review to highlight some of the exciting growth and change we've observed over the past year. Designers James and Veronica had ambitious ideas for this year's review, including strong, bold typographic treatments and interactive data visualizations. We've gotten some great feedback on the final product, as well as some curious developers wondering how we pulled it off, so we're going to review the development process for Year in Review and talk about some of the technologies we leveraged to make it all happen.

## Data Synchronization - Touchlab

DevFeed: [Data Synchronization - Touchlab](<https://devfeed.tech/articles/data-synchronization-touchlab-38071.md>)

Original publisher: [Read original article](<https://touchlab.co/2013-03-data-synchronization-2>)

Published: 2013-03-10T20:59:00Z

Content type: tutorial

Language: en

Sources: [Touchlab | Enterprise Mobile Innovation & Development](<https://devfeed.tech/sources/touchlab-enterprise-mobile-innovation-development.md>)

Topics: [data](<https://devfeed.tech/topics/data.md>), [HTML5 and CSS3 tricks](<https://devfeed.tech/topics/html5-and-css3-tricks.md>), [web applications](<https://devfeed.tech/topics/web-applications.md>), [Image](<https://devfeed.tech/topics/image.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [data](<https://devfeed.tech/tags/data.md>), [development](<https://devfeed.tech/tags/development.md>), [html5](<https://devfeed.tech/tags/html5.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [synchronization](<https://devfeed.tech/tags/synchronization.md>), [thoughts](<https://devfeed.tech/tags/thoughts.md>), [web-app](<https://devfeed.tech/tags/web-app.md>)

### AI overview

This article introduces offline data synchronization for HTML5 and web applications. It explains that synchronization can involve local edits, server updates, conflicts with other users' data, database relationships, business logic, and image uploads. It outlines a workflow of periodically updating from the server, editing data locally, and pushing changes back.

### Source excerpt

Synchronizing data is a big topic. It means different things to different people, and is obviously framed by projects they've worked on.

## Why moving elements with translate() is better than pos:abs top/left

DevFeed: [Why moving elements with translate() is better than pos:abs top/left](<https://devfeed.tech/articles/why-moving-elements-with-translate-is-better-than-pos-abs-top-left-21678.md>)

Original publisher: [Read original article](<https://paulirish.com/2012/why-moving-elements-with-translate-is-better-than-posabs-topleft/>)

Author: Paul Irish

Published: 2012-12-20T08:00:00Z

Content type: article

Language: en

Sources: [Paul Irish](<https://devfeed.tech/sources/paul-irish.md>)

Topics: [CSS](<https://devfeed.tech/topics/css.md>), [modern web development](<https://devfeed.tech/topics/modern-web-development.md>), [developer tooling](<https://devfeed.tech/topics/developer-tooling.md>), [Chrome](<https://devfeed.tech/topics/chrome.md>), [HTML5 and CSS3 tricks](<https://devfeed.tech/topics/html5-and-css3-tricks.md>)

Tags: [chrome](<https://devfeed.tech/tags/chrome.md>), [css](<https://devfeed.tech/tags/css.md>), [examples](<https://devfeed.tech/tags/examples.md>), [html5](<https://devfeed.tech/tags/html5.md>), [laptop](<https://devfeed.tech/tags/laptop.md>), [layout](<https://devfeed.tech/tags/layout.md>), [performance](<https://devfeed.tech/tags/performance.md>), [pixel](<https://devfeed.tech/tags/pixel.md>), [update](<https://devfeed.tech/tags/update.md>), [writeup](<https://devfeed.tech/tags/writeup.md>)

### AI overview

This article compares moving elements with CSS 2D transforms such as translate() against absolute positioning with top/left. Using Chrome DevTools evidence, it explains that transforms can move an element on a GPU-composited layer, reducing per-frame paint work and producing smoother animation, while noting that pixel snapping can sometimes make top/left appear visually preferable.

### Source excerpt

Update (2016): The more canonical writeup of this technique is at High Performance Animations - HTML5 Rocks. TL;DR: Only transform & opacity; never top/left! In modern days we have two primary options for moving an element across the screen: using CSS 2D transforms and translate() using position:absolute and top/left Chris Coyier was asked why you should use translate. Go read his response which covers well why it's more logical to move elements for design purposes (with transform) independent of your element layout (with position). I wanted to answer this with Chrome and get some good evidence on what's going on. I ended up recording a video on the experience: It's a good watch and dives into Chrome DevTools' Timeline, compositing, paint cost, accelerated layers, and more... but if you want the abbreviated text version, read on: First thing, Chris made some simple demos to try things out: This sorta works, but there is such low complexity in this situation that it's all going to look pretty great. We need something closer to a complex website to properly evaluate the two (thx joshua for the macbook!): Now we're starting to get closer, but immediately I get distracted by something. Distraction: Pixel snapping If you run the demo above you might notice the top edge of the MacBook looks a little bit better in the top/left one. (And here I am writing a post about why translate is better! Preposterous!) So this is due to the absolute positioned macbook sticks to pixel positions, whereas the translate()'d one can interpolate at sub-pixel positions. One of the Chrome GPU engineers, James Robinson, called this the "dubstep effect", as these pixels appear to be getting pounded by bass. Here's a closeup of the effect... watch the top white edge of the macbook in each: On the left, you see stair-stepping down three pixels and back up again. This pixel snapping may result in a less distracting transition in this case, though this wouldn't be so noticeable if you were moving object

## Wave Raid powered by Timed Comments

DevFeed: [Wave Raid powered by Timed Comments](<https://devfeed.tech/articles/wave-raid-powered-by-timed-comments-2176.md>)

Original publisher: [Read original article](<https://developers.soundcloud.com/blog//wave-raid>)

Published: 2012-04-05T00:00:00Z

Content type: tutorial

Language: en

Sources: [SoundCloud Backstage Blog](<https://devfeed.tech/sources/soundcloud-backstage-blog.md>)

Topics: [SDKs](<https://devfeed.tech/topics/sdks.md>), [HTML5 and CSS3 tricks](<https://devfeed.tech/topics/html5-and-css3-tricks.md>)

Tags: [announcements](<https://devfeed.tech/tags/announcements.md>), [api](<https://devfeed.tech/tags/api.md>), [app](<https://devfeed.tech/tags/app.md>), [event](<https://devfeed.tech/tags/event.md>), [gaming](<https://devfeed.tech/tags/gaming.md>), [html5](<https://devfeed.tech/tags/html5.md>), [scripting](<https://devfeed.tech/tags/scripting.md>)

### AI overview

The article shows how SoundCloud timed-comment events in its JavaScript SDK can drive an HTML5 game, using comments as collectible coins. It also suggests synchronized visualizations, transcripts, and real-time rich-media applications.

### Source excerpt

One of the SoundCloud API's most powerful features is the timed comment. At its core it seems simple enough: a piece of text associated with a point in time for a particular track. But where you see timed opinions, I see a light-weight game scripting engine. So when Johannes Wagener told me he was adding an event to our JS SDK, I immediately began work on Wave Raid: Quest for the Timed Comment.

## HTML5 Widget API

DevFeed: [HTML5 Widget API](<https://devfeed.tech/articles/html5-widget-api-2055.md>)

Original publisher: [Read original article](<https://developers.soundcloud.com/blog//html5-widget-api>)

Published: 2012-03-22T00:00:00Z

Content type: release

Language: en

Sources: [SoundCloud Backstage Blog](<https://devfeed.tech/sources/soundcloud-backstage-blog.md>)

Topics: [HTML5 and CSS3 tricks](<https://devfeed.tech/topics/html5-and-css3-tricks.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>), [modern web development](<https://devfeed.tech/topics/modern-web-development.md>)

Tags: [announcements](<https://devfeed.tech/tags/announcements.md>), [api](<https://devfeed.tech/tags/api.md>), [documentation](<https://devfeed.tech/tags/documentation.md>), [html5](<https://devfeed.tech/tags/html5.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [playground](<https://devfeed.tech/tags/playground.md>)

### AI overview

SoundCloud announces a JavaScript API for its HTML5 widget, enabling access to and control of widget properties.

### Source excerpt

Today we're officially announcing our JavaScript API for the new HTML5 SoundCloud Widget. To use it, just insert the script tag on a page...

## Semantics in practice and mapping semantic value to its consumers

DevFeed: [Semantics in practice and mapping semantic value to its consumers](<https://devfeed.tech/articles/semantics-in-practice-and-mapping-semantic-value-to-its-consumers-21665.md>)

Original publisher: [Read original article](<https://paulirish.com/2011/semantics/>)

Author: Paul Irish

Published: 2011-11-14T18:25:00Z

Content type: article

Language: en

Sources: [Paul Irish](<https://devfeed.tech/sources/paul-irish.md>)

Topics: [Accessibility](<https://devfeed.tech/topics/accessibility.md>), [HTML5 and CSS3 tricks](<https://devfeed.tech/topics/html5-and-css3-tricks.md>), [aria](<https://devfeed.tech/topics/aria.md>), [HTML](<https://devfeed.tech/topics/html.md>), [web-standards](<https://devfeed.tech/topics/web-standards.md>)

Tags: [accessibility](<https://devfeed.tech/tags/accessibility.md>), [aria](<https://devfeed.tech/tags/aria.md>), [browsers](<https://devfeed.tech/tags/browsers.md>), [html](<https://devfeed.tech/tags/html.md>), [html-elements](<https://devfeed.tech/tags/html-elements.md>), [html5](<https://devfeed.tech/tags/html5.md>), [implementation](<https://devfeed.tech/tags/implementation.md>)

### AI overview

The article argues that practical accessibility should take priority over intricate or unstable HTML semantics. It discusses HTML5 elements, document outlining, heading structure, screen reader behavior, ARIA, browser implementation, and assistive technology accessibility APIs.

### Source excerpt

Divya Manian kicked off a good bout of discussion of HTML semantics with her post Our pointless pursuit of semantic value. It called into question the amount of time we spend on identifying the Right and Best ways of marking up our content while highlighting details of some of the consumers of semantics like assistive technology (AT). Jeremy Keith responded in Pursing Semantic Value. I wanted to chime in on Jeremy's post so, I've published below my comment from the original post: Thanks Jeremy for raising a practical example. This discussion is a tough one as much of HTML5 has clear semantics (nav/header/footer), but then parts have underdeveloped semantic meaning or add confusion to authors. Jeremy's gist is a great example, in fact, of a poor time investment in semantics. It ascribes value to the new method of document outlining, which recently sees different styling for h1's depending on section nesting. Recent browsers do indeed style the h1's different; but if you actually structure your document as such, you do it to the detriment of your screenreader users: they will either get these h1's all as top level headlines or a mishmash of heading nesting levels that don't match any expected behavior (As an aside, this is completely unrelated but if anyone's curious what CSS it takes to make that new h1 styling work across browsers... feast your eyes on this beauty) Additionally, <hgroup> is on the chopping block and is not supported by JAWS. Suffice it to say, Now is not a smart time to invest your time understanding the unwieldy document outlining algorithm. Luke's comment digs in deeper to the messy semantic state of the outlining algorithm. semantics are hard...let's go shopping and CREATE EPIC SHIT... -- patrick h. lauke (@patrick_h_lauke) November 14, 2011 The practicalities of making accessible web content are messy, but important. The fact that we seem to spend more time on div vs article vs. section than on learning ARIA is a crime. (Furthermore, learning ARIA isn'

## Experiment 02: Destroying SoundCloud & Instagram

DevFeed: [Experiment 02: Destroying SoundCloud & Instagram](<https://devfeed.tech/articles/experiment-02-destroying-soundcloud-instagram-2033.md>)

Original publisher: [Read original article](<https://developers.soundcloud.com/blog//experiment-02-destroying-soundcloud-instagram>)

Published: 2011-05-11T00:00:00Z

Content type: article

Language: en

Sources: [SoundCloud Backstage Blog](<https://devfeed.tech/sources/soundcloud-backstage-blog.md>)

Topics: [HTML5 and CSS3 tricks](<https://devfeed.tech/topics/html5-and-css3-tricks.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [content](<https://devfeed.tech/tags/content.md>), [experiment](<https://devfeed.tech/tags/experiment.md>), [hacks](<https://devfeed.tech/tags/hacks.md>)

### AI overview

The article describes a map-based SoundCloud experience for Moby's album, built with Rails, jQuery, CSS3, and PolyMaps. It integrates SoundCloud and Instagram APIs to play the album and add fan-submitted photos.

### Source excerpt

I was fortunate enough to be given the opportunity to help Moby premiere his new record via SoundCloud. I didn't know what to expect from...

## Add HTML5 Data Attribute Support to XHP

DevFeed: [Add HTML5 Data Attribute Support to XHP](<https://devfeed.tech/articles/add-html5-data-attribute-support-to-xhp-22035.md>)

Original publisher: [Read original article](<https://codebeforethehorse.tumblr.com/post/4792658458>)

Author: Codebeforethehorse

Published: 2011-04-21T01:18:00Z

Content type: tutorial

Language: en

Sources: [Stefan Parker](<https://devfeed.tech/sources/stefan-parker.md>)

Topics: [PHP](<https://devfeed.tech/topics/php.md>), [HTML5 and CSS3 tricks](<https://devfeed.tech/topics/html5-and-css3-tricks.md>), [aria](<https://devfeed.tech/topics/aria.md>), [Accessibility](<https://devfeed.tech/topics/accessibility.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>)

Tags: [accessibility](<https://devfeed.tech/tags/accessibility.md>), [aria](<https://devfeed.tech/tags/aria.md>), [html](<https://devfeed.tech/tags/html.md>), [html5](<https://devfeed.tech/tags/html5.md>), [php](<https://devfeed.tech/tags/php.md>), [xhp](<https://devfeed.tech/tags/xhp.md>)

### AI overview

A tutorial on modifying PHP-based XHP to support HTML5 data-* and WAI-ARIA attributes. It explains how to bypass validation for these attributes, limit that behavior to HTML elements rather than custom components, and optimize the relevant attribute-access methods.

### Source excerpt

UPDATE: I've added data- and aria- attribute support into XHP by default. Downloading the latest source will get you this for free. XHP runs validation checks on all attribute sets and gets, but in the emerging world of HTML5, data attributes are validation-less. With a little bit of tweaking, you can add HTML5 data attribute support to all HTML elements in XHP. In the same swing, you can add WAI-ARIA support for your accessibility users. In this post we'll dig into the php source of XHP and do a little optimizations of our own. First, you'll need to change the getAttribute() and setAttribute() functions inside :x:composable-element to account for these special attributes. The logic behind it is simple, if it's a data or aria attribute, skip the validation checks. This is how those two functions would now look: final public function setAttribute($attr, $val) { if (substr($attr, 0, 5) != 'data-' && substr($attr, 0, 5) != 'aria-') { $this->validateAttributeValue($attr, $val); } $this->attributes[$attr] = $val; return $this; } final public function getAttribute($attr) { if (isset($this->attributes[$attr])) { return $this->attributes[$attr]; } else if (substr($attr, 0, 5) == 'data-' || substr($attr, 0, 5) == 'aria-') { return null; } // Maintain the rest of this function as is. } Voila! Now all your XHP elements support HTML5 data attributes. You could stop here and be just fine, but technically this isn't the best solution. HTML elements support data attributes, but you don't want your own custom XHP components to take them*. To allow HTML5 data attributes on only HTML elements, we need to rethink our approach. Going back to XHP's default behavior, rename the getAttribute() and setAttribute() methods in :x:composable-element to getDeclaredAttribute() and setDeclaredAttribute() respectively, make them protected, and replace them with the following non-final functions: public function getAttribute($attr) { return $this->getDeclaredAttribute($attr); } public function setA