1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PlasmoでMUIとTailwindCSSを共存させる

Posted at

ブラウザ拡張機能を作れるReactフレームワークPlasmoにて、MUIとTailwindCSSを共存させる方法が調べてもどこにもなかったのでここに残しておく。

plasmo公式のTailwindCSSスタートガイドを参照すると、以下のようなstyle要素を返すメソッドを定義する記述がある。
TailwindCSS単体であればこれで十分だが、MUIを併用させるためにはこれだけでは不十分。

export const getStyle = () => {
  const style = document.createElement("style")
  style.textContent = cssText
  return style
}

MUIを使用するためには、以下のような記述が必要になる。

const styleElement = document.createElement("style")

const styleCache = createCache({
  key: "plasmo-mui-cache",
  prepend: true,
  container: styleElement
});

export const getStyle = () => styleElement;

const MuiThemedContent = () => (
  <CacheProvider value={styleCache}>
    {...children}
  </CacheProvider>
);

Plasmoでこれら両方を使うためには、getStyleで返すstyle要素にMUIのものとTailwindCSSのもの2つをマージしたものを返す必要がある。そのため、以下のように記述する。

import cssText from "data-text:~style.css";
const styleElement = document.createElement("style")

const styleCache = createCache({
  key: "plasmo-mui-cache",
  prepend: true,
  container: styleElement
});

export const getStyle = () => {
  const tailwindCSSStyle = document.createElement("style");
  tailwindCSSStyle.textContent = cssText;
  styleElement.appendChild(tailwindCSSStyle);
  return styleElement;
};

const MuiThemedContent = () => (
  <CacheProvider value={styleCache}>
    {...children}
  </CacheProvider>
);

これでTailwindCSSとMUIが同時に使えるようになる。
内部としては、ShadowDOM内のStyle要素にCSSの記述を固めているため、その部分をマージした形になっている。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?