2012-12-13 3 views
1

레일 3.2를 사용하여 나침반 레일. 나침반 : 왜 작동하려면 이중 가져 오기를 수행해야합니까?

I가 다음 파일을

screen.css.scss

@import "compass"; 

application.css.scss

/* 
*= require_self 
*= require_tree . 
*/ 

@import "screen"; 

.content { 
    background-color: #eee; 
    padding: 20px; 
    margin: 0 -20px; 
    @include border-radius(6px, 6px); 
    @include box-shadow(0,0,0,.15); 
} 

application.html.erb (레이아웃, 관련 선) :

<%= stylesheet_link_tag "application", :media => "all" %> 

내 응용 프로그램 레이아웃에 적합합니다.

다음으로, home.css.scss이 나는 ​​스타일 (홈)에 노력하고있어 특정 페이지 : 최대한 빨리 @import "compass/css3/text-shadow"; 드롭으로

@import url(http://fonts.googleapis.com/css?family=Oleo+Script+Swash+Caps:700); 

@import "compass/css3/text-shadow"; <<-- This is the line I don't understand 

.welcome { 
    text-align: center; 
    h1 { 
    font-family: 'Oleo Script Swash Caps', cursive; 
    font-weight: 700; 
    font-size: 110pt; 
    line-height: 130px; 
    @include single-text-shadow; 
    } 
} 

, Undefined mixin 'single-text-shadow'. 같은 내 코드 휴식을 텍스트 그림자 가져 오기 선을 application.css.css로 옮기면 문제가 발생합니다.

제 질문은 입니까? 저는 screen.css.scss를 통해 application.css.css에 전체 나침반 프레임 워크를 포함 시켰습니다. 그 파일이 제대로 작동하는지 알기 때문에 그 파일이로드되었습니다. 그렇다면 왜 이렇게 두 번 포함해야합니까?

답변

2

home.css.scssapplication.css.scss를 가져 오는 경우를 제외하고는,이 예상되는 동작과 같은 의미가 있습니다 : 간단하게하기 위해, 당신은 또한 같은 하위 부품을 필요로 할 수 있습니다. 컴파일 된 문서 당 한 번만 가져올 필요가 있습니다. 해당 문서에 포함 된 모든 부분 (및 코드에서 가져온 후)에서 사용할 수 있습니다.

컴파스를 한 번만 _base.scss 부분으로 가져올 수 있습니다 (사용 가능한 다른 플러그인과 함께). 그런 다음 기본 설정이 필요한 곳이면 어디든지 해당 부분을 가져올 수 있습니다.

+0

하지만 렌더링/색인을하면 내 전체 응용 프로그램 CSS가'application.css.scss '를 통해 렌더링됩니다. 즉, 이미 페이지에 있습니다. 그리고'application.css.scss'는 이미 Compass를 가져옵니다. 그래서, 왜 compass가'home.css.scss'에 사용 가능하지 않습니까? 나는'home'이'application'을 가져 오지 않는다는 것을 이해합니다. 그러나 그들은 동시에 같은 페이지에 존재합니다 ... 아무것도 계산하지 않습니까? – ezuk

+0

전처리는 * HTML이 항상 렌더링되기 전에 발생하므로 아무 것도 계산되지 않습니다. 색인으로 정리되면 Sass는 이미 처리되고 나침반은 더 이상 작동하지 않습니다. –

+0

고마워요! 나는 그것을 얻는다라고 생각한다. 당신의 대답을 수락했습니다. – ezuk

0

질문을 올바르게 이해했는지 모르겠지만 여기에 이중 가져 오기가 없습니다.

컴퍼스는 모듈러 프레임 워크입니다. 당신은 모든 부분을 사용해야 만하는 것은 아닙니다. 대신 원하는 부분 만 포함 할 수 있습니다.

# application.sass 
@import "compass" 
@import "compass/css3/" 
@import "compass/utilities/" 
+0

내가 불분명하면 죄송합니다. 위의 screen.css.scss에는 이미 '@ import'나침반이 있습니다. 그래서 ... 모든 것을 가져와야하지 않습니까? – ezuk

+0

주 가져 오기를 계층 구조의 맨 위 노드에 넣습니다. 또한 응용 프로그램 파일에 트리가 필요하더라도 sceen을 명시 적으로 요구하는 이유를 이해하지 못합니다. – phoet

관련 문제