일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 자바스크립트
- 기술이론
- 개발이론
- blender
- ender
- 옵시디언 dataviewjs
- 알고리즘
- 코드스니펫
- 개발
- ender v3
- 피부관리
- 웹개발
- It용어
- 3D모델링
- Sketcher
- 네트워크 이론
- 개발기초
- 남자피부관리
- 나이아신아마이드
- 옵시디언
- ender v3 se
- 옵시디언 dataview
- 웹기초
- 기술용어
- 네트워크
- dataviewjs
- 3d 프린터 기초
- DATAVIEW
- 프로그래머스
- 3D프린터
- Today
- Total
루이의 개발 블로그
왜 css가 적용 안되는거지??? deep에 대해 알아보자 본문
상황
vuetify 컴포넌트의 디자인을 수정하려고 하는데 수정이 안 될 때가 간혹 있다. 아니 엄청 많다. 왜 그런 문제가 있고 어떻게 해결해야하는지에 대한 내용이 기술.
vuetify 와 같이 번들링된 라이브러리 소스 코드를 수정하는 것은 쉽지 않은 일이다. 이것을 수정하기 위해선 보통 전역 스타일 변경을 통해 변경이 가능하다. 하지만 이렇게 되면 모든 스타일시트에 영향이 가므로 scoped 를 사용하여 선언 한다.
scoped를 사용한 CSS
<style scoped>
.a{
background-color : red;
}
</style>
- scoped 를 사용하여 배경색을 변경한 모습
- 해당 코드는 현재 파일에만 영향이가고 나머지 파일의 a태그에는 영향을 주지않는다.
그렇다면 이 상황에서 vuetify 의 컴포넌트의 디자인을 수정하게 되면 어떻게 될까?
놀랍게도 적용이 안 되는 경우가 많다.
그렇다면 vuetify의 컴포넌트에 접근하려면 어떻게 해야할까?
v-deep 의 사용
v-deep 을 사용해서 컴포넌트 요소에 접근을 하면 된다.
방식은 3가지 이다.
<style scoped>
.a >>> .b {}
</style>
<style scoped>
.a::v-deep .b {}
</style>
<style scoped>
.a /deep/ .b {}
</style>
- .a >>> .b 와 같은 형태는 일부 CSS 전처리 환경에서 작동되지 않을 수 있으므로 그 외에 방식을 따르는게 올바른 선택이다.
예시
<div v-html="htmlData"/>
<style scoped>
div::v-deep .red{
color : red ;
}
</style>
- v-html 부분의 컬러를 수정할 때 일반적인 방법으로 사용하면 스타일 적용이 안 된다.
- 이 경우 v-deep 을 사용해야 접근이 가능하다.
예시2
간단한 예시를 만들어봤다. 일반적으로 v-data-table의 행 색상을 바꾸려고 하면 정상적으로 바뀌지 않는 문제가 발생되는데 이것을 deep을 활용해서 처리한 예시이다.
::v-deep .v-data-table tbody tr{
background-color: red;
}
::v-deep .v-data-table tr {
background-color: red;
}
- 실제 작동하지 않는 코드입니다. 예시로만 봐주세요
- 예시 코드 둘다 같은 동작을 합니다.
deep 적용 전
deep 적용 후
다음과 같이 data-v-00ddd2a3 .v-data-table tbody tr 이 생겨난 것을 볼 수 있다. 기존에 tr에는 아무 CSS가 적용되어 있지 않은 상황에서 v-data-table의 tr 속성에 배경을 빨갛게 하라고 CSS를 덮어 씌운것이다. 그렇게 결과적으로 색상이 빨갛게 변하는 것을 볼 수 있다.
그렇다면 v-data-table의 ... tbody ? tr? 은 어떻게 알아낸 정보인가
어떤 클래스에 적용 시켜야할지 .v-data-table 의 tbody의 tr에 적용 시키기 전에 어디에 적용 시킬지 명확히 알필요가 있다. 그것을 추적하는 방법은 간단하다.
- 그런다음 html 화면에서 우측 클릭해서 검사 클릭
- 요소 탭을 클릭한다.
- 현재 선택된 요소가 선택된 것을 확인할 수 있다.
- 좌측에 표시된 것처럼 태그를 마우스 갖다대면 어떤 요소를 선택했는지 확인 할 수있다. 원하는 요소를 선택한다음 element.style에 속성을 넣어준다. 일반 css 스타일이 입력하듯 넣어주면 변경된 것을 확인할 수 있다.
- 그렇게 변경 하면 적용한 style sheet를 볼 수 있다. 그렇다면 이 요소를 역 추적 해서 어떤 클래스에 해당되는지 찾으면 된다.
- 다음과 같이 거꾸로 위로 올라가보면
tr... tbody ... table ... v-data-table__wrapper .... v-data-table (... 이후 생략) 이렇게 표시된 것을 확인 할 수 있다.
- 즉 이것은 .v-data-table .v-data-table__wrapper .table .tbody .tr 이것으로 볼 수 있다.
<style scoped>
::deep .v-data-table .v-data-table__wrapper .table .tbody .tr{
background-color: red;
}
</style>
- 이렇가 적용하면 문제없이 색상변경된 것을 볼 수 있다.
이렇게 사용해도 되지만 코드가 너무 길어진것 같지 않은가? 클래스가 너무 각박하지 않은가? 좀 느슨하게 풀어보자
<style scoped>
::deep .v-data-table .tr{
background-color: red;
}
</style>
놀랍게도 동일하게 적용된다.
이전 코드는 v-data-table 안에 v-data-table__wrapper 안에 있는 table 안에있는 tbody 안에있는 tr의 색상을 빨강으로 바꾼다 . 라는 의미를 갖는다면
이 코드는 v-data-table 안에있는 tr의 배경색을 빨강으로 바꾼다 는 의미다.
이전코드는 더더욱 섬세하다고 본다면 현재 코드는 좀 유도리있게 처리한 경우라고 보면된다.
상황에 따라 섬세해야 할 때는 이전코드 처럼 섬세하게 각박하게 조건을 추가해서 적용 시켜주면되고. 그렇게까지 섬세해질 필요가 없다면. 현재 코드처럼 유도리있게 처리해주는 것도 방법이다.
출처(참고문헌)
연결문서
'웹개발 > 디자인관련' 카테고리의 다른 글
Display속성 이해하기 (0) | 2023.09.29 |
---|