148

私は次のことができるようになりたいです:

height: 25% - 5px;

明らかに、それを行うとエラーが発生します。

Incompatible units: 'px' and '%'.
4

6 に答える 6

287

Sassは、ある単位から次の単位に変換できない値に対して算術演算を実行できません。Sassには、ピクセルやその他の単位で「100%」の幅を正確に知る方法がありません。それはブラウザだけが知っていることです。

calc()代わり に使用する必要があります。ブラウザの互換性を確認してください...

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

値が変数に含まれている場合は、補間を使用してそれらを文字列に変換する必要があります(そうでない場合、Sassは算術演算を実行しようとします)。

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

.foo {
  width: calc(#{$a} - #{$b});
}
于 2012-11-07T17:28:34.660 に答える
28

calcSCSS[コンパイル時]とCSS[実行時]の両方に機能があります。後者の代わりに前者を呼び出す可能性があります。

明らかな理由で、ミキシングユニットはコンパイル時に機能しませんが、実行時に機能します。

unquoteSCSS関数を使用して、後者を強制することができます。

.selector { height: unquote("-webkit-calc(100% - 40px)"); }
于 2014-08-28T11:38:31.640 に答える
15
$var:25%;
$foo:5px;
.selector {
    height:unquote("calc( #{$var} - #{$foo} )");
}
于 2015-08-16T02:41:39.997 に答える
7

コンテナの幅がわかっている場合は、次のようにすることができます。

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

多くの場合、#containerは相対的な幅を持つ可能性があることを認識しています。その後、これは機能しません。

于 2013-07-31T20:02:49.230 に答える
2

古いスレッドを復活させて申し訳ありません-:after疑似セレクターを使用したコンパスのストレッチはあなたの目的に合うかもしれません-例えば。divで画面の左から(50%+ 10px)までの幅を埋める場合は、(SASSインデント構文で)使用できます。

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

:after要素は.exampleの右側の50%を埋め(.exampleの幅に50%を残します)、.exampleはその幅に10pxを加えたものに引き伸ばされます。

于 2013-09-01T15:51:29.427 に答える
1

パーセント値を変数に追加して、#{$variable} たとえば

$twentyFivePercent:25%;
.selector {
    height: calc(#{$twentyFivePercent} - 5px);
}
于 2019-05-06T04:14:55.913 に答える