SCSS에 다른 수업 포함


309

SCSS 파일에 다음이 있습니다.

.class-a{
  display: inline-block;
  //some other properties
  &:hover{
   color: darken(#FFFFFF, 10%);
 }  
}

.class-b{

 //Inherite class-a here

 //some properties
}

클래스 b에서 모든 속성과 중첩 선언을 상속하고 싶습니다 class-a. 이것은 어떻게 이루어 집니까? 을 사용하려고했지만 @include class-a컴파일 할 때 오류가 발생합니다.

답변:


624

외모 좋아 @mixin하고 @include이 같은 간단한 경우에 필요하지 않습니다.

하나는 할 수 있습니다 :

.myclass {
  font-weight: bold;
  font-size: 90px;
}

.myotherclass {
  @extend .myclass;
  color: #000000;
}

40
@extend는 제대로 작동하지만 클래스 중 하나가 지시문 (보통 미디어 쿼리) 내에 있으면 작동하지 않습니다. 둘 다 같은 지시어에 있지 않으면.
MartinAnsty

13
흥미로운 사실은 여기를 참조하십시오 @extend-알아 두어야 할 까다로운 부작용이 있습니다. stackoverflow.com/questions/30744625/…
Toni Leigh

2
@HoniLeigh에게 감사합니다 .PlaceHolder 는 부모 선택기가 확장에만 사용되는 경우 추가 CSS 선택기 생성을 절약하므로 흥미 롭습니다 (어디서도 사용되지 않음). 위의 예에서와 같이 .myclass다른 곳에서는 사용하지 떨어져에서 (나는 가정) .myotherclass다음은 한 수 더 나은, .myclass정의 %myclass및 연장 .myotherclass@extend %myclass;. 다음과 같이 생성됩니다.myotherclass{ font-weight: bold; font-size: 90px; color: #000000; }
Abhijeet


@MartinAnsty 글쎄, 그건 짜증나.
Abram

51

이 시도:

  1. 공통 속성으로 자리 표시 자 기본 클래스 (% base-class)를 만듭니다.
  2. 이 자리 표시 자로 클래스 (.my-base-class)를 확장하십시오.
  3. 이제 모든 클래스에서 % base-class를 확장 할 수 있습니다 (예 : .my-class).

    %base-class {
       width: 80%;
       margin-left: 10%;
       margin-right: 10%;
    }
    
    .my-base-class {
        @extend %base-class;
    }
    
    .my-class {
        @extend %base-class;
        margin-bottom: 40px;
    }
    

이 답변은 가장 인기있는 답변과 동일하다고 생각합니다. 내가 맞아?
Yevgeniy Afanasyev

1
@Yevgeniy Afanasyev 아니요, 클래스를 직접 확장하지는 않지만 자리 표시자를 직접 확장 할 수 있습니다.
Ashwin

그것은 요청되지 않았다 :(
Yevgeniy Afanasyev

1
@Yevgeniy Afanasyev는 클래스를 직접 확장 (가장 인기있는 답변)으로 작동하지 않지만 자리 표시자를 확장하면 효과가있었습니다. 따라서 동일한 답변이 아니기 때문에 답변을 게시했습니다.
Ashwin

3
다른 답변을 게시 해 주셔서 감사합니다. 그러나 왜 우리에게 필요한지 명확하지 않습니다. 이 접근법의 유스 케이스 또는 장점을 명확히하기 위해 더 많은 추론을 추가 할 수 있다면 감사하겠습니다. 감사합니다.
Yevgeniy Afanasyev

16

@extend를 사용하는 것이 좋은 해결책이지만 컴파일 된 CSS는 클래스 정의를 깨뜨릴 것입니다. 동일한 자리 표시자를 확장하는 모든 클래스는 함께 그룹화되며 클래스에서 확장되지 않은 규칙은 별도의 정의에있게됩니다. 여러 클래스가 확장되면 컴파일 된 CSS 또는 개발 도구에서 선택기를 찾는 것이 거의 불가능합니다. 믹스 인은 믹스 인 코드를 복제하고 추가 스타일을 추가합니다.

sassmeister 에서 @extend와 @mixin의 차이점을 볼 수 있습니다


새 서미스터 링크가 끊어졌습니다.
LexieHankins

11
@extend .myclass;
@extend #{'.my-class'};

22
이 코드는 질문에 대답 할 수 있지만,이 코드가 질문에 응답하는 이유 및 / 또는 방법에 대한 추가 컨텍스트를 제공하면 장기적인 가치가 향상됩니다.
adiga

2
@extend #{'.my-class', '.my-other-class'};
iarroyo

2
여기서 해시 뱅의 의미는 무엇입니까?
Konrad Viltersten

7

다른 옵션은 속성 선택기를 사용할 수 있습니다.

[class^="your-class-name"]{
  //your style here
}

"your-class-name"으로 시작하는 모든 클래스는이 스타일을 사용합니다.

따라서 귀하의 경우 다음과 같이 할 수 있습니다.

[class^="class"]{
  display: inline-block;
  //some other properties
  &:hover{
   color: darken(#FFFFFF, 10%);
 }  
}

.class-b{
  //specifically for class b
  width: 100px;
  &:hover{
     color: darken(#FFFFFF, 20%);
  }
}

w3Schools의 속성 선택기에 대한 추가 정보

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.