문제

Web Components에 대한 Rob Dodson의 강연 후 그는 새로운 "cat"에 대해 언급했습니다. ^^ 그리고 "모자" ^ CSS 선택기, 사용자 정의 요소의 ShadowDOM뿐만 아니라 브라우저의 기본 요소의 ShadowDOM에도 스타일을 적용할 수 있는 가능성에 대해 질문했습니다.

ShadowDOM에서 요소의 스타일을 지정할 수 있습니까?어떤 브라우저에서 어떻게?내가 찾은 유일한 관련 기사는 Dimitry Glazkov가 쓴 'Shadow DOM이 도대체 무엇인가요?' 여기서 그는 의사 선택기를 사용하여 ShadowDOM 하위 트리에 접근하는 방법을 설명하고 -webkit-appearance: none; 규칙.

도움이 되었습니까?

해결책

초안 상태로 인해 CSS 범위 지정 모듈 레벨 1 언제든지 바뀔 수 있다는 점 때문에 나의 원래 접근 방식은 그리 오래 작동하지 않았습니다.

~ 안에 크롬 v33+ 너는 돌아서야 할 거야 Enable Experimental Web Platform Features ~에 chrome://flags 아래 코드가 작동하려면 켜세요.


로 시작 크롬 카나리아 v33 그리고 고양이 선택기 ^^ 정답은: 예!
2014-03-30 업데이트: 크롬 카나리아 v35+ 이제 소위 말하는 최신 버전의 선택기를 지원합니다. /deep/ 선택자.

모든 경계에 걸쳐 스타일을 적용하고 기본 요소에서도 작동합니다.

보다: http://codepen.io/Volker_E/pen/jsHFC

/* ... Example for applying to all h2 elements, no matter if DOM or any ShadowDOM subtree ... */
:root ^^ h2 {
    font-family: "Arial Black", sans-serif;
}

/* Cr 33+: The "cat" also works on native elements' ShadowDOM */
video ^^ input[type="button"]:first-child {
    opacity: .75;
    -webkit-filter: drop-shadow( .2rem .2rem .2rem hsla( 5, 100%, 50%, 1 ) );
}

/* Cr 35+: /deep/ also works on native elements' ShadowDOM */
video /deep/ input[type="button"]:first-child {
    opacity: .75;
    -webkit-filter: drop-shadow( .2rem .2rem .2rem hsla( 5, 100%, 50%, 1 ) );
}

다른 팁

적어도 크롬에서 가능합니다.섀도우 DOM을 확인하면 <input type="date">의 DOM을 확인하십시오.

<input type="date">
  #document-fragment
    <div part="-webkit-datetime-edit" id="date-time-edit">
      <div part="-webkit-datetime-edit-fields-wrapper">
        <span role="spinbutton" aria-valuetext="blank" aria-valuemin="1" aria-valuemax="12" aria-help="Month" part="-webkit-datetime-edit-month-field">mm</span>
        <div part="-webkit-datetime-edit-text">/</div>
        <span role="spinbutton" aria-valuetext="blank" aria-valuemin="1" aria-valuemax="31" aria-help="Day" part="-webkit-datetime-edit-day-field">dd</span>
        <div part="-webkit-datetime-edit-text">/</div>
        <span role="spinbutton" aria-valuetext="blank" aria-valuemin="1" aria-valuemax="275760" aria-help="Year" part="-webkit-datetime-edit-year-field">yyyy</span>
      </div>
    </div>
</input>
.

스타일 별도 의사 요소를 구성 할 수 있습니다.

::-webkit-datetime-edit-year-field {
  font-weight: bold;
}
.

Rob Dodson 자신에 따르면 ^^^ 선택기를 사용하여 기본 섀도우 DOM을 스타일로 사용할 수 있습니다.따라서이 규칙은 일해야합니다 (크롬 카나리아, 나는 믿습니다) :

input[type="date"] ^ [part="-webkit-datetime-edit-year-field"] {
  font-weight: bold;
}
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top