LoginSignup
1
0

More than 3 years have passed since last update.

Next focusなどcssの擬似クラス

Last updated at Posted at 2019-09-08

Next.jsでfocusなどの擬似クラスを書くとき

ReactではCSSを書くときにinline stylesで書けます。
しかし、Next.jsで擬似クラスを書こうとしたら、うまく反応してくれなかったので、
Styled JSXを使った時のメモをを残します。

問題点

inline stylesでCSSを記載していたのですが、何故か:focusなどの擬似クラスが反応してくれませんでした。

import React from 'react'

// ex
const Password = () => {
  return (
    <input type='password' style={style} />
  );
}

// :focusの部分が擬似クラスとして読み込まれていない?
const style = {
  border: '1px solid #1b2538',
  ':focus': {
    border: '1px solid #1976d2',
  }
}

改善

Nextでは「Styled JSX」モジュールがデフォルトで含まれているので、こちらの書き方に直したら擬似クラスも反応してくれました。

// ex
import React from 'react'

const Password = () => {
  return (
    <div>
      <input type='password'/>
      // 変更箇所
      <style jsx>{`
      input {
        border: 1px solid #1b2538;
      }
      input:focus {
        border: 1px solid #1976d2;
      }
      `}</style>
    </div>
  );
}

こちらのモジュールのいいところは、CSSをフルサポートしているので、box-shadowなど要素をそのまま書けること。
わざわざキャメルケースに直したりする必要をないので、使いやすくて楽です。

まとめ

Next.jsでCSSを書くときは「Styled JSX」モジュールがデフォルトで組み込まれているので、このモジュールを積極的に使っていく。

補足

ReactとかJSが得意な者の記事ではありません。
問題点の原因がわかる方がいたら教えていただけると助かります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0