--- category: Input created: '2019-11-23' description: Create a toggle password visibility with CSS flexbox keywords: css flexbox, toggle password visibility thumbnail: /assets/css-layout/thumbnails/toggle-password-visibility.png title: Toggle password visibility --- ## HTML ```html index.html
``` ## CSS ```css styles.css .toggle-password-visibility { display: flex; /* Border */ border: 1px solid #d1d5db; border-radius: 0.25rem; padding: 0.25rem; } .toggle-password-visibility__input { border-color: transparent; /* Take available width */ flex: 1; } .toggle-password-visibility__toggle { /* Reset */ background: #fff; border-color: transparent; /* Center the content */ display: flex; align-items: center; justify-content: center; } ``` In reality, the `click` event handler of the button needs to update the `type` attribute of the input to `text` or `password`: ```js document.querySelector('.toggle-password-visibility__toggle').addEventListener('click', (e) => { const input = e.target.previousElementSibling; const type = input.getAttribute('type'); input.setAttribute('type', type === 'text' ? 'password' : 'text'); }); ``` ```css styles.css hidden body { align-items: center; display: flex; justify-content: center; } .toggle-password-visibility { display: flex; /* Border */ border: 1px solid #d1d5db; border-radius: 0.25rem; padding: 0.25rem; /* Demo */ height: 2.5rem; } .toggle-password-visibility__input { border-color: transparent; /* Take available width */ flex: 1; /* Demo */ width: 16rem; } .toggle-password-visibility__toggle { /* Reset */ background: #fff; border-color: transparent; /* Center the content */ display: flex; align-items: center; justify-content: center; } .toggle-password-visibility__svg { fill: none; height: 1.5rem; stroke: #d1d5db; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1; width: 1.5rem; } ``` ```html index.html hidden
```