css Audio - Active file-generic CSS - Active Generic - Active HTML - Active JS - Active SVG - Active Text - Active file-generic Video - Active header Love html icon-new-collection icon-person icon-team numbered-list123 pop-out spinner split-screen star tv
CodePen probably won't work great in this browser. We generally only support the major desktop browsers like Chrome, Firefox, Safari, and Edge. Use this one at your own risk! If you're looking to test things, try looking at Pens/Projects in Debug View.
user profile image

This pen shows how the speech recognition API can be used to retrieve a spoken word from a user and perform an action (e.g. locking/unlocking a padlock) if that word is valid (chrome only).

Padlock design inspired by Chris Cacioppe on Dribbble


  1. this gave me so much idea IRL! We are currently developing a website for a clinic, and this will make the site more accessible for some users! Nice demo!

  2. This is insane mate, absolutely love it!

  3. Unlock - oh, cool! lack lok sack - fuuuu

  4. Do you know why it breaks the animation when the keyword is modified?

  5. @dxp1

    I think I understand what you're asking:

    if (transcript === 'unlock' && !padlock.classList.contains('unlock')) {
    } else {
        if (transcript === 'lock' && padlock.classList.contains('unlock')) {

    You can change what the transcript is checking for by changing the transcript === 'unlock' and transcript === 'lock' values to whatever string you want to check for and it should still work. If you also want to change the class name to something else, you will also have to change both references in this condition e.g. padlock.classList.contains('unlock'), in the openPadlock and closePadlock functions on lines 15 and 19 e.g. padlock.classList.add('unlock'), and in the CSS at lines 68 and 72 e.g. .padlock.unlock::before

  6. Ah! the CSS was the culprit! thank you very helpful and amazing work!

Leave a Comment Markdown supported. Click @usernames to add to comment.

You must be logged in to comment.