2013-08-20 6 views
1

Susy 그리드는 $from-direction 변수를 가지고,하지만 난 그렇게처럼 사용할 수 없습니다Susy (나침반에 대한 응답 그리드)

[dir="rtl"] {$from-direction: right;} 

생성 된 CSS는 오른쪽에서 모든 방향으로 관련 Susy의 CSS를 변경 -left이며 앞에 [dir="rtl"]이 붙지 않습니다.

내가 뭘 잘못하고 있니?

답변

2

Sass (또는 Susy)가 HTML에 대해 아는 방법은 없습니다. 모든 것들이 사전 컴파일되어 있기 때문에 변수 설정뿐만 아니라 스위치 내부에 실제 스타일을 중첩시켜야합니다. 이것은 아마도 서로 다른 두 개의 컴파일 된 스타일 시트를 의미합니다.이 스타일 시트를 사용하면 Sass에서 쉽게 할 수 있습니다.

두 개의 scss 파일이 필요합니다. rtl.scssltr.scss. 각각은 그 변수로 시작, 다음 사이트에 필요한 모든 부분 지문을 가져옵니다

// rtl.scss 
$from-direction: right; 

@import "my-site-partials.scss"; 

// ltr.scss 
$from-direction: left; 

@import "my-site-partials.scss"; 

그런 다음 당신은 당신의 HTML이에 따라 올바른 CSS를 출력 파일을로드해야합니다 방향. 하나의 파일에서이 작업을 수행 할 수도 있지만 두 경우 모두 사용하는 코드를 두 번로드하고 모든 스타일을 추가 레벨로 중첩시킬 수 있습니다. 두 파일 접근 방식을 권장합니다.

UPDATE : 단일 파일 접근.

단일 파일에서 동일한 기술을 사용할 수 있지만 모든 스타일을 감싸는 별도의 래퍼가 필요합니다. 이런 식으로 뭔가 : 당신은 믹스 인으로 그것을 만들 수

@each $dir in ltr, rtl { 
    $from-direction: if(ltr, left, right); 
    [dir="#{$dir}"] { 
    // your styles 
    } 
} 

:

@mixin bi { 
    @each $dir in ltr, rtl { 
    $from-direction: if(ltr, left, right); 
    [dir="#{$dir}"] { 
     @content; 
    } 
    } 
} 

@include bi { 
    // your styles 
} 

또는 당신은 방향 변경 특정 스타일을 무시할 수 :

@mixin rtl { 
    $from-direction: right; 

    [dir="rtl"] { 
    @content; 
    } 

    $from-direction: left; 
} 

// your ltr styles 

@include rtl { 
    // your rtl overrides 
} 

다른 많은 변형이 있습니다를 그리고 유연성을 위해 추가 할 수있는 기능이 있습니다. 그러나 이것은 당신을 시작해야합니다.

+1

감사합니다. Eric. 이것은 [bi-app] (http://anasnakawa.github.io/bi-app-sass/)와 같은 솔루션이 사용하는 접근 방법 인 것 같습니다. 그러나'lang'과'dir' 속성을 언어와 텍스트 방향 스타일의 선택자로 사용하고 스타일 시트를 분리하지는 않습니다. 나는 SMACSS (http://smacss.com/) 전략 (미디어 쿼리, 브라우저 별, 언어 별 등)과 관련된 모든 스타일을 함께 유지하려고 노력 중이다. –

+0

일부 단일 파일 옵션은 내 업데이트를 참조하십시오. –

+0

시간을 내 주셔서 감사합니다 (그리드), Eric, 고맙습니다. 나는 이러한 접근법을 가지고 놀 것이다. –