Noh | エンジニア向け情報共有コミュニティ
Signup / Login

React Daisyuiで画面幅によってデザインを切り替える方法

y
yosi2024/07/21 6:36

React Daisyuiで画面幅によってデザインを切り替える方法を教えてください。

A
Answerer AIPowered by gpt-3.5-turbo

React Daisyuiでは、画面幅によってデザインを切り替えるために、Media Queryを使用することができます。

まず、必要なMedia Queryを定義するために、tailwind.config.jsファイルを開きます。次に、themeセクションに以下のように記述します。

module.exports = { theme: { extend: { screens: { 'sm': '640px', 'md': '768px', 'lg': '1024px', 'xl': '1280px', }, }, }, variants: {}, plugins: [], }

上記の例では、画面幅が640px以下の場合は'sm'、768px以下の場合は'md'、1024px以下の場合は'lg'、1280px以下の場合は'xl'というMedia Queryが定義されています。

次に、このMedia Queryを使用して、要素のクラス名を切り替えることができます。たとえば、画面幅がmd以上の場合にだけ表示される要素を実装するには、以下のようにします。

import React from 'react'; import { classes } from 'react-dom'; import 'tailwindcss/tailwind.css'; const MyComponent = () => { return ( <div className={classes('sm:hidden', 'md:block')}> {/* この要素は画面幅がmd以上の場合に表示されます */} </div> ); }

上記の例では、'sm:hidden'クラスが画面幅がmd以上の場合に非表示にし、'md:block'クラスが画面幅がmd以上の場合に表示するようになります。

このように、React DaisyuiではMedia Queryを使用して、画面幅に応じたデザインの切り替えを行うことができます。

y
yosi2024/07/21 6:38

daisyuiではなくreact-daisyuiパッケージを使うときの話です。

A
Answerer AIPowered by gpt-3.5-turbo

申し訳ありません、誤解がありました。React Daisyuiではなく、react-daisyuiパッケージを使用して画面幅によってデザインを切り替える方法を説明します。

react-daisyuiでは、tailwindcssに組み込まれているresponsiveクラスやinlineスタイルを活用することができます。以下の手順でデザインの切り替えを行います。

  1. まず、react-daisyuiパッケージをインストールします。
npm install react-daisyui
  1. 必要なコンポーネントをimportします。
import { Button } from 'react-daisyui'
  1. 画面幅に応じてデザインが切り替わるようにクラス名やスタイルを指定します。以下は画面幅がmd以上の場合にボタンが表示される例です。
const MyComponent = () => { return ( <div className="md:flex"> <Button>ボタン</Button> </div> ); }

上記の例では、md:flexクラスが画面幅がmd以上の場合にFlexboxを有効にし、ボタンが表示されるようになります。

また、インラインスタイルを使用する場合は、以下のようになります。

const MyComponent = () => { const buttonStyle = { display: 'none', '@media (min-width: 768px)': { display: 'block', }, }; return ( <div> <Button style={buttonStyle}>ボタン</Button> </div> ); }

上記の例では、@mediaクエリを使用して画面幅がmd(768px)以上の場合にボタンを表示するように設定しています。

以上が、react-daisyuiパッケージを使用して画面幅によってデザインを切り替える方法です。お役に立てれば幸いです。

y
yosi2024/07/21 7:00

上記のやり方は微妙

最終的にinnerClassNameにTailwindcssのクラス名を付与して解決した。

例えばAvatarを使った以下のコードがあるとする。

<Avatar size="lg" shape="circle" border borderColor="primary" src="./assets/yosi.jpg" />

sizeプロパティを使わずにクラス名でサイズを指定するにはinnerClassName"w-40 h-auto"を入れる。
高さがコンポーネント内でデフォルトで指定されてるので、w-40で横幅を指定するだけでは横長になる。そこで高さをAutoにしておくことで縦横比を保って拡大される。

<Avatar + innerClassName="w-40 h-auto" - size="lg" shape="circle" border borderColor="primary" src="./assets/yosi.jpg" />

最終的に基本はAvatarの大きさ24で一定幅を超えるとAvatarの大きさを40にするコードは以下。

<Avatar + innerClassName="w-24 md:w-40 h-auto" - size="lg" shape="circle" border borderColor="primary" src="./assets/yosi.jpg" />
コメントするにはログインが必要です
y
yosi