bluelion2 / Project-issue-repo

프로젝트를 진행하면서 있던 오류와 해결을 기록하는 repo
1 stars 0 forks source link

[CSS, EmotionJS] css 가 처음 로딩 시 적용되다가 깨지는 이슈 #46

Closed bluelion2 closed 1 year ago

bluelion2 commented 1 year ago

✨ What? 발견된 이슈 간단히 정리하기

특정 선생님만 웹 사이트 접근시 css가 꺠져서 나오는 이슈

📚 캡쳐한 사진들 ezgif com-gif-maker

bluelion2 commented 1 year ago

사용자 크롬에 확장프로그램으로 수식 셰프 하나만 존재하는데, 끄면 css 가 정상 동작함.

크롬 익스텐션

bluelion2 commented 1 year ago
스크린샷 2022-12-27 오후 3 48 58 스크린샷 2022-12-27 오후 4 08 26

extension으로 인해 jira style도 깨짐

스크린샷 2022-12-27 오후 4 09 49

Extension으로 인해 웨일 브라우저에서도 깨짐 - jira

jira

bluelion2 commented 1 year ago

원인 추측으로는 emotion/cache 일 것으로 추측중.

스크린샷 2022-12-27 오후 3 47 14

Primary use cases
Using emotion in embedded contexts such as an <iframe/>

Setting a [nonce](https://emotion.sh/docs/@emotion/cache#nonce-string) on any <style/> tag emotion creates for security purposes

Using emotion with a developer defined <style/> tag

Using emotion with custom Stylis plugins
bluelion2 commented 1 year ago

해당 익스텐션 프로젝트 코드중.. @emotion/cache 의심이 가는 부분

createCache
createCache allows for low level customization of how styles get inserted by emotion. It's intended to be used with the [<CacheProvider/>](https://emotion.sh/docs/cache-provider) component to override the default cache, which is created with sensible defaults for most applications.

createCache createCache는 @emotion에 의해 스타일이 삽입되는 방법에 대한 낮은 수준의 사용자 정의를 허용합니다. 대부분의 응용 프로그램에 적합한 기본값으로 생성되는 기본 캐시를 재정의하기 위해 구성 요소와 함께 사용하기 위한 것입니다.

@emotion/cache



function App() {
  return (
    <Extension height={toggle ? '80px' : '35%'} minHeight={toggle ? '' : '200px'}>
      <Frame
        id="iframe"
        head={[
          <link
            key={1}
            type="text/css"
            rel="stylesheet"
            href={
              process.env.NODE_ENV === 'development'
                ? 'content.css'
                : chrome.runtime.getURL('/content.css')
            }
          ></link>,
          <link
            key={2}
            type="text/css"
            rel="stylesheet"
            href={
              process.env.NODE_ENV === 'development'
                ? 'sementic.css'
                : chrome.runtime.getURL('/sementic.css')
            }
          ></link>,
        ]}
      >
        <FrameContextConsumer>
          {({ document, window }) => {
            const cache = createCache({
              key: 'head',
              container: document.head,
            });
            return (
              <CacheProvider value={cache}>
                <MainPage toggle={toggle} onToggle={onToggle} />
              </CacheProvider>
            );
          }}
        </FrameContextConsumer>
      </Frame>
    </Extension>
  );
}

export default App;
bluelion2 commented 1 year ago

추측

참고

bluelion2 commented 1 year ago

emotion을 쓰는 곳은 다 깨지는듯...

bluelion2 commented 1 year ago

흠... 그렇다고 하기에는 같은 @emotion을 쓰는 ifKakao page는 또 잘 나오네...

스크린샷 2022-12-29 오전 10 07 04

bluelion2 commented 1 year ago

cacheProvider가 문제가 맞는듯.

Code


Result

스크린샷 2022-12-29 오전 11 38 50
bluelion2 commented 1 year ago

createCache(option)에는 옵션을 줄 수 있는데,

option: { key: 'css' ... }

data-emotion=css-global에 저장하지 않고, data-emotion={key}에 저장을 하게 됨 cache를 쓰지 않으면 data-emotion=css-global 에 css 저장.

Ifkakao

스크린샷 2022-12-29 오전 11 51 42


Among

스크린샷 2022-12-29 오전 11 51 35
bluelion2 commented 1 year ago

로컬(dev)에서는 잘 나오지만, production에서는 잘 나오지 않는 이유

bluelion2 commented 1 year ago

결론