Hey, I found the link here, and they used this trick. They added a class to the input type. and a message is displayed there. Hope this helps after a little tweaking. working code: http://codepen.io/smarty_tech/pen/ONZRVp
<form id="frm" action="action"> <div> <label>Email</label> <input type="email" required="required"/><span class="theTooltip">Invalid email</span> </div> <div> <button formnovalidate="formnovalidate">OK</button> </div>
document.querySelector('#frm').addEventListener('submit', e => { e.preventDefault(); e.currentTarget.classList.add('submitted'); }); body font-family: Helvetica, sans-serif display: flex flex-direction: column align-items: center justify-content: center overflow: hidden width: 100% height: 100vh background orange form > div position: relative margin-bottom: 10px .theTooltip $bgcolor = rgba(black, 0.7) $arrow = 10 $radius = 5 $maxWidth = 250 $padding = 15 backface-visibility: hidden will-change: opacity, visibility max-width: $maxWidth * 1px border-radius: $radius * 1px background-color: $bgcolor padding: $padding * 1px color: white box-sizing: border-box display: inline-block position: absolute transform-style: preserve-3d transform: translate(15%, -50%) top: 50%; left: auto right: auto bottom: auto visibility: hidden margin: 0 opacity: 0 transition: opacity 0.3s ease-out z-index: 100 &:after content: '' position: absolute width: 0 height: 0 top: 50% margin-top: $arrow * -1px left: $arrow * -1px border-top: $arrow * 1px solid transparent border-bottom: $arrow * 1px solid transparent border-right: $arrow * 1px solid $bgcolor label display: inline-block vertical-align: center input background: white border: 1px solid transparent cursor: pointer display: inline-block overflow: visible margin: 0 outline: 0 vertical-align: center text-decoration: none width: auto border-radius: 3px cursor: text padding: 7px &:focus &:active outline: none .submitted input &:invalid border: 1px solid red ~ .theTooltip visibility: visible opacity: 1 &:valid ~ .theTooltip transition: opacity 0.3s, visibility 0s 0.3s
source share