Yes! That is definitely a big step in the right direction. It's usually enough to remove at least some of the JS burden on forms. I'm not sure how widespread its use is in practice, though.
I know it uses JS but the customValidity stuff is pretty cool too!
and the :invalid css option (I like to just make the bottom border red, dashed)
FYI now there’s also :user-invalid which waits for the user to blur out of the field before it indicates the validity.