https://www.smashingmagazine.com/2014/03/introduction-to-custom-elements/