Upgrade to Pro — share decks privately, control downloads, hide ads and more …

多様なユーザーニーズに応えるフロントエンドデザインパターン:入力フォーム編

Rikiya Ihara / magi
March 15, 2018
30

 多様なユーザーニーズに応えるフロントエンドデザインパターン:入力フォーム編

Rikiya Ihara / magi

March 15, 2018
Tweet

More Decks by Rikiya Ihara / magi

Transcript

  1. 伊原 力也 2 • freee IA/UX • HCD-Net 評議委員 /

    認定人間中心設計専門家 • ウェブアクセシビリティ基盤委員会 WG1委員 • 国際ユニヴァーサルデザイン協議会 移動空間研究部会 副主査
  2. 10

  3. 11

  4. 15

  5. Point 1 入力項目とラベルを明示的に関連付ける <form id="register"> <label for="email">メールアドレス</label> <input type="text" id="email"

    name="email"> <label for="username">ユーザー名</label> <input type="text" id="username" name="username" placeholder="例:HotStuff666"> <label for="password">パスワード</label> <input type="password" id="password" name="password"> <button type="submit">登録する</button> </form> 19
  6. Point 1 入力項目とラベルを明示的に関連付ける <form id="register"> <label for="email">メールアドレス</label> <input type="text" id="email"

    name="email"> <label for="username">ユーザー名</label> <input type="text" id="username" name="username" placeholder="例:HotStuff666"> <label for="password">パスワード</label> <input type="password" id="password" name="password"> <button type="submit">登録する</button> </form> 20
  7. 隣接セレクタでlabelにスタイルを付ける [type="radio"] + label { cursor: pointer; /* その他、基本のスタイル */

    } [type="radio"]:focus + label { /* フォーカス時のスタイル */ } [type="radio"]:checked + label { /* 選択時のスタイル */ } 27
  8. ラジオボタンを力強く隠す .sorter [type="radio"] { position: absolute !important; width: 1px !important;

    height: 1px !important; padding:0 !important; border:0 !important; overflow: hidden !important; clip: rect(1px, 1px, 1px, 1px); } 28
  9. 文字色を濃くしつつ、スタイルを変える ::placeholder { color: #000; font-style: italic; } ::-webkit-input-placeholder {

    color: #000; font-style: italic; } ::-moz-placeholder { color: #000; font-style: italic; } ::-ms-input-placeholder { color: #000; font-style: italic; } 37
  10. 47 <form> <fieldset> <legend>ログインフォーム</legend> <div> <label for="username">ユーザー名</label> <input id="username" type="text"

    aria-describedby="username-hint"> <div role="tooltip" id="username-hint">ユーザー名には、あなたの Eメールアドレス を登録してください</div> </div> <div> <label for="password">パスワード</label> <input id="password" type="password" aria-describedby="password-hint"> <div role="tooltip" id="password-hint">メールでお送りしたパスワードを入れてくださ い</div> </div> </fieldset> <button type="submit">サイトに入る</button> </form>
  11. [role="tooltip"] { background: orange; color: white; padding: 0.25em; display: none;

    } input:focus + [role="tooltip"] { display: block; } 48 フォーカス時にツールチップを出すCSS
  12. 送信を止め、送信ボタンの上にエラーを出す例 57 <div id="error" aria-live="assertive" role="alert"></div> <button type="submit">登録する</button> #error:empty {display:

    none;} var form = document.getElementById('register'); form.addEventListener('submit', function(event) { if (errors) { event.preventDefault(); // 送信させない document.getElementById('error').textContent = '登録情報が正しいことを 確認してください。' } });
  13. アイコン画像とaria-labelでエラーをより明白に 58 <div id="error" aria-live="assertive" role="alert"> <p> <svg role="img" aria-label="エラー:">

    <use xlink:href="#error"></use> </svg> 登録情報が正しいことを確認してください。 </p> </div>
  14. invalidを伝え、説明文を紐付ける/アイコンを出す 65 <label for="password">パスワード</label> <input type="password" id="password" aria-invalid="true" aria-describedby="password-hint"> <div

    id="password-hint">パスワードは6文字以上にしてください。</div> </label> [aria-invalid="true"] { border-color: red; background: url('images/warning-icon.svg') center right; }