web-dev-qa-db-ja.com

SASSおよび@ font-face

次のCSSがあります-SASSでどのように記述しますか?私はcss2sassでそれを逆コンパイルしようとしましたが、エラーが発生し続けています....それは私のCSSですか(これは動作します;-))?

@font-face {
  font-family: 'bingo';
    src: url("bingo.eot");
    src: local('bingo'),
       url("bingo.svg#bingo") format('svg'),
       url("bingo.otf") format('opentype');
}
47
Dycey

誰かが疑問に思っている場合-それはおそらく私のCSSだった...

@font-face
  font-family: "bingo"
  src: url('bingo.eot')
  src: local('bingo')
  src: url('bingo.svg#bingo') format('svg')
  src: url('bingo.otf') format('opentype')

としてレンダリングされます

@font-face {
  font-family: "bingo";
  src: url('bingo.eot');
  src: local('bingo');
  src: url('bingo.svg#bingo') format('svg');
  src: url('bingo.otf') format('opentype'); }

これは十分に近いようです...ただSVGレンダリングを確認する必要があります

53
Dycey

私はしばらくこれに苦労してきました。 Dyceyのソリューションは、srcを複数回指定するとcssファイルに同じものが出力されるという点で正しいです。ただし、これはOSX Firefox 23では壊れているようです(おそらく他のバージョンもありますが、テストする時間はありません)。

クロスブラウザ@font-faceFont Squirrel のソリューションは次のようになります。

@font-face {
    font-family: 'fontname';
    src: url('fontname.eot');
    src: url('fontname.eot?#iefix') format('embedded-opentype'),
         url('fontname.woff') format('woff'),
         url('fontname.ttf') format('truetype'),
         url('fontname.svg#fontname') format('svg');
    font-weight: normal;
    font-style: normal;
}

Sassでは改行がサポートされていないため、カンマ区切りの値でsrcプロパティを生成するには、すべての値を1行に書き込む必要があります。上記の宣言を作成するには、次のSassを作成します。

@font-face
  font-family: 'fontname'
  src: url('fontname.eot')
  src: url('fontname.eot?#iefix') format('embedded-opentype'), url('fontname.woff') format('woff'), url('fontname.ttf') format('truetype'), url('fontname.svg#fontname') format('svg')
  font-weight: normal
  font-style: normal

パスを何度も書き出すのは馬鹿げているように思えます。コードの長すぎる行は好きではないので、このミックスインを書くことでそれを回避しました。

=font-face($family, $path, $svg, $weight: normal, $style: normal)
  @font-face
    font-family: $family
    src: url('#{$path}.eot')
    src: url('#{$path}.eot?#iefix') format('embedded-opentype'), url('#{$path}.woff') format('woff'), url('#{$path}.ttf') format('truetype'), url('#{$path}.svg##{$svg}') format('svg')
    font-weight: $weight
    font-style: $style

使用法:たとえば、前のmixinを使用して、次のようにFrutiger Lightフォントをセットアップできます。

+font-face('frutigerlight', '../fonts/frutilig-webfont', 'frutigerlight')
38
Jezen Thomas

代わりにwoff2を含むSCSSミックスインをお探しの場合:

@mixin fface($path, $family, $type: '', $weight: 400, $svg: '', $style: normal) {
  @font-face {
    font-family: $family;
    @if $svg == '' {
      // with OTF without SVG and EOT
      src: url('#{$path}#{$type}.otf') format('opentype'), url('#{$path}#{$type}.woff2') format('woff2'), url('#{$path}#{$type}.woff') format('woff'), url('#{$path}#{$type}.ttf') format('truetype');
    } @else {
      // traditional src inclusions
      src: url('#{$path}#{$type}.eot');
      src: url('#{$path}#{$type}.eot?#iefix') format('embedded-opentype'), url('#{$path}#{$type}.woff2') format('woff2'), url('#{$path}#{$type}.woff') format('woff'), url('#{$path}#{$type}.ttf') format('truetype'), url('#{$path}#{$type}.svg##{$svg}') format('svg');
    }
    font-weight: $weight;
    font-style: $style;
  }
}
// ========================================================importing
$dir: '/assets/fonts/';
$famatic: 'AmaticSC';
@include fface('#{$dir}amatic-sc-v11-latin-regular', $famatic, '', 400, $famatic);

$finter: 'Inter';
// adding specific types of font-weights
@include fface('#{$dir}#{$finter}', $finter, '-Thin-BETA', 100);
@include fface('#{$dir}#{$finter}', $finter, '-Regular', 400);
@include fface('#{$dir}#{$finter}', $finter, '-Medium', 500);
@include fface('#{$dir}#{$finter}', $finter, '-Bold', 700);
// ========================================================usage
.title {
  font-family: Inter;
  font-weight: 700; // Inter-Bold font is loaded
}
.special-title {
  font-family: AmaticSC;
  font-weight: 700; // default font is loaded
}

$typeパラメーターは、重みが異なる関連するファミリをスタックするのに役立ちます。

@ifは、 Interフォント (Robotoと同様)をサポートする必要があるためです。OTFはありますが、現時点ではSVGおよびEOTタイプはありません。

解決できないエラーが発生した場合は、フォントディレクトリ($dir)。

1
CPHPython