Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Inheritance bug in Badge internal text color #2006

Closed
3 tasks
sungik-choi opened this issue Feb 20, 2024 · 0 comments · Fixed by #2009
Closed
3 tasks

Inheritance bug in Badge internal text color #2006

sungik-choi opened this issue Feb 20, 2024 · 0 comments · Fixed by #2009
Labels
bug Issues related to anything that isn't working

Comments

@sungik-choi
Copy link
Contributor

sungik-choi commented Feb 20, 2024

Summary

Inheritance bug in Badge internal text color

Reproduction process

image image
  • 텍스트 색상은 color: var(--b-text-color); 이며, --b-text-color 지정되지 않았을 경우 기본값이 inherit 입니다.
  • 상위에 텍스트가 존재한다면 Text는 상위 컴포넌트의 색상(정확히는 가장 근접한 --b-text-color)을 상속받게 되어, 의도한대로 Badge의 색상을 오버라이드할 수 없습니다.
  • 명시적으로 color 속성의 값을 오버라이드해야 합니다.
  • Text는 중첩되어 사용되는 경우가 많으므로 이 케이스를 더 찾아봐야 할 거 같습니다.

Version of bezier-react

2.0.0-alpha.12

Browser

No response

Operating system

  • macOS
  • Windows
  • Linux

Additonal Information

No response

@sungik-choi sungik-choi added the bug Issues related to anything that isn't working label Feb 20, 2024
@github-project-automation github-project-automation bot moved this to 📌 Backlog in Bezier React Feb 20, 2024
sungik-choi added a commit that referenced this issue Feb 21, 2024
…rit' to 'initial' (#2009)

<!--
  How to write a good PR title:
- Follow [the Conventional Commits
specification](https://www.conventionalcommits.org/en/v1.0.0/).
  - Give as much context as necessary and as little as possible
  - Prefix it with [WIP] while it’s a work in progress
-->

## Self Checklist

- [x] I wrote a PR title in **English** and added an appropriate
**label** to the PR.
- [x] I wrote the commit message in **English** and to follow [**the
Conventional Commits
specification**](https://www.conventionalcommits.org/en/v1.0.0/).
- [x] I [added the
**changeset**](https://github.com/changesets/changesets/blob/main/docs/adding-a-changeset.md)
about the changes that needed to be released. (or didn't have to)
- [x] I wrote or updated **documentation** related to the changes. (or
didn't have to)
- [x] I wrote or updated **tests** related to the changes. (or didn't
have to)
- [x] I tested the changes in various browsers. (or didn't have to)
  - Windows: Chrome, Edge, (Optional) Firefox
  - macOS: Chrome, Edge, Safari, (Optional) Firefox

## Related Issue
<!-- Please link to issue if one exists -->

- Fixes #2006

## Summary
<!-- Please brief explanation of the changes made -->

Change incorrect default value of css variable 'inherit' to 'initial'

## Details
<!-- Please elaborate description of the changes -->

잘못된 마이그레이션을 수정합니다. 기존에는 아래와 같은 사고 흐름으로 마이그레이션을 진행했었습니다.

```
// AS-IS
color: colorProp ? colorProp : inherit

// TO-BE
// 스타일 외부에서 --color를 조건부 주입하면 되겠다.
--color: inherit;
color: var(--color)
```

하지만 CSS variable의 초기 키워드로 `inherit` 을 설정하는 것과 해당 속성에 직접적으로 `inherit` 을
설정하는 건 동작이 아예 다릅니다.
위의 예를 들어, `--color: inherit` 은 color 속성에 상위 속성을 적용하는 게 아니라, 접근 가능한 가장
가까운 곳에 위치하는 `--color` 의 값을 상속하게됩니다. 한번 더 자세히 풀어보자면 아래와 같습니다.

```
<div style={{ '--color': 'red' }}>
  <div style={{ 'color': 'blue: }}>
    <Foo />
  </div>
</div>
```

맨 위 예제의 스타일이 적용된 컴포넌트를 `Foo` 라고 했을 때 `Foo` 의 color는 `red` 가 됩니다.
**`--color` 는 color가 아니라 상위 `--color` 의 값을 상속받고, color는 `--color` 의 값을
가르키기 때문입니다**. 이를 오버라이드하기 위해선 상위에서 정확하게 `Foo` 요소를 선택하여 color 속성을 지정해줘야
합니다.

이러한 상속 방식은 마이그레이션 이전 컴포넌트의 동작과 다릅니다. [color
속성](https://developer.mozilla.org/ko/docs/Web/CSS/color)은 기본적으로 **[상속을
지원하는
속성](https://developer.mozilla.org/ko/docs/Web/CSS/Inheritance#%EC%83%81%EC%86%8D%EB%90%98%EB%8A%94_%EC%86%8D%EC%84%B1)이기
때문에** inherit 키워드를 지정할 필요가 없습니다. 값을 지정하지 않는다면, 부모의 값을 상속하게 됩니다. CSS
variable을 유효하지 않은 값(Invalid Value)으로 만들면 color의 값은 값을 지정하지 않은 것으로 평가됩니다.
그러므로, 기존과 같이 부모의 값을 상속하게 됩니다. CSS variable에는 `initial` 키워드를 사용하여 [명시적으로
유효하지 않은 값](https://drafts.csswg.org/css-variables/#guaranteed-invalid)으로
설정했습니다.

### Breaking change? (Yes/No)
<!-- If Yes, please describe the impact and migration path for users -->

No

## References
<!-- Please list any other resources or points the reviewer should be
aware of -->

> If, for whatever reason, one wants to manually reset a variable to the
guaranteed-invalid value, using the keyword
[initial](https://drafts.csswg.org/css-cascade-5/#valdef-all-initial)
will do this.

- https://drafts.csswg.org/css-variables/#guaranteed-invalid
@github-project-automation github-project-automation bot moved this from 📌 Backlog to ✅ Done in Bezier React Feb 21, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Issues related to anything that isn't working
Projects
No open projects
Archived in project
1 participant