Sass는 퍼센트 빼기 px를 계산합니다


133

다음을 수행하고 싶습니다.

height: 25% - 5px;

분명히 그렇게하면 오류가 발생합니다.

Incompatible units: 'px' and '%'.

내가 얻을 Invalid property value오류입니다. Chrome의 Canary 빌드를 포함한 모든 브라우저에서.
Mike Fielden

난 그게 멋진 원하는 걸 얻을 thatd 말대꾸 기능이 있다면, 난 그냥 놀고 있었는데 calc...
마이크 Fielden

예 :) 내가 말했듯이 그것이 어떻게 이루어 졌는지 신경 쓰지 않는다 calc. calc내 브라우저에서 작동하지 않는 것 같으 므로 sass 구현이 가장 좋을 것입니다.
Mike Fielden

1
Sass는 calc ()에 대한 폴리 필 역할을 할 수 없습니다. 25 %를 px로 변환하는 방법을 모르므로 수학을 수행하고 CSS를 생성 할 수 있습니다. 정확한 요구에 따라 디스플레이 테이블 제품군 사용, 상자 크기 변경 또는 음수 여백 사용 ( jsfiddle.net/5JZGt )
cimmanon

답변:


239

Sass는 한 단위에서 다음 단위로 변환 할 수없는 값에 대해서는 산술을 수행 할 수 없습니다. Sass는 픽셀이나 다른 단위로 "100 %"의 폭을 정확히 알 수있는 방법이 없습니다. 브라우저 만 아는 것입니다.

calc()대신 사용해야 합니다. 사용할 수있는 브라우저 호환성 확인 ...

.foo {
    height: calc(25% - 5px);
}

값이 변수에 있으면 보간을 사용하여 문자열로 변환해야 할 수도 있습니다 (그렇지 않으면 Sass는 산술을 시도합니다).

$a: 25%;
$b: 5px;

.foo {
  width: calc(#{$a} - #{$b});
}

5
calc ()가 대부분의 브라우저에서 작동하지 않는다고 말하고 싶습니다. 모바일 플랫폼은 데스크톱만큼 중요합니다.
dalgard 2019

3
거기에는 논쟁의 여지가 없지만 브라우저를 세어보세요! 지원하지 않는 것보다 calc ()를 더 많이 지원하며 가까운 시일 내에 더 많이 지원할 것입니다!
chrisgonzalez

5
나는 Calc 함수 내부의 변수를 사용하여 폭 문제가 있었다, 그러나 여기에서 찾을 : stackoverflow.com/questions/13542164/... 이 같은 변수를 참조 할 수 있음을 : calc(25% - #{$var}).
mlunoe

출시, 기존 브라우저의 측면에서, dalgard의 진술 @ 후속하려면 CALC는 더는 작동 이상에 작업을하지 않는 참조하십시오. caniuse.com/#search=calc
imjared

3
당신은 항상 추가하여 가을 다시 옵션을 사용할 수 있습니다 width: 22%무엇보다도에서하기 width로이야calc
Hengjie

23

calcSCSS [compile-time] 및 CSS [run-time] 모두에 기능 이 있습니다 . 당신은 후자 대신 전자를 호출했을 것입니다.

명백한 이유로 믹싱 유닛은 컴파일 타임에는 작동하지 않지만 런타임에는 작동합니다.

unquoteSCSS 함수 인 을 사용하여 후자를 강제 실행할 수 있습니다 .

.selector { height: unquote("-webkit-calc(100% - 40px)"); }

14
$var:25%;
$foo:5px;
.selector {
    height:unquote("calc( #{$var} - #{$foo} )");
}

2
이 질문에 대한 답변을 게시 해 주셔서 감사합니다! 컨텍스트가없는 코드 덤프는 솔루션이 어떻게 또는 왜 작동하는지 설명하지 않으므로 원본 포스터 (또는 미래의 독자)가 배후의 논리를 이해하기 어렵 기 때문에 코드 전용 답변은 스택 오버플로에서 권장하지 않습니다. 다른 사람들이 귀하의 답변을 활용할 수 있도록 질문을 편집하고 코드에 대한 설명을 포함하십시오. 감사!
Maximillian Laumeister

저를 구했습니다. 너비 : unquote ( "calc (100 %-# {$ leftnav-width})");
httpete

5

컨테이너의 너비를 알고 있다면 다음과 같이 할 수 있습니다.

#container
  width: #{200}px
  #element
    width: #{(0.25 * 200) - 5}px

많은 경우 # 컨테이너의 너비가 상대적 일 수 있음을 알고 있습니다. 그런 다음 작동하지 않습니다.


2

낡은 실을 되살려 서 죄송합니다. : after pseudo-selector를 사용하여 나침반을 늘릴 수 있습니다. div가 화면의 왼쪽에서 (50 % + 10px)까지 너비를 채우려면 (SAS 들여 쓰기 구문)을 사용할 수 있습니다.

.example
    background: red
    +stretch(0, -10px, 0, 0)
    &:after
        +stretch(0, 0, 0, 50%)
        content: ' '
        background: blue

: after 요소는 .example 오른쪽에 50 %를 채우고 (예 : 너비에 50 %를 사용할 수 있음) .example은 해당 너비에 10px를 더한 값으로 늘어납니다.


1
이 어딘가에 믹싱이 적거나 적습니까? calc는 전혀 잘 작동하지 않는 것 같습니다.
v3nt

0

백분율 값을 변수에 추가하고 #{$variable} 예를 들어 사용하십시오.

$twentyFivePercent:25%;
.selector {
    height: calc(#{$twentyFivePercent} - 5px);
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.