SCSS-ちょっとした練習、パートI

画像



SASS



SCSS



)についての記事、Habrahabrについては既に十分ですが、私の意見では、実際には少ししか実践できないような十分なものはありません。 このギャップを埋めようとします。 約1年前、 SASS



記事の1つに「夢中になりました」。それ以来、このテクノロジーに非常に夢中になり、通常のCSS



コードを手動で入力するのは時間の無駄に思えます。 この記事は、SCSSについて聞いたことがない、またはまだ試していないタイプセッター(またはWebプログラマー)を対象としています。 より経験豊富な同志は、それにとらわれることは何もないと信じています。



SCSSとは



SCSS



SASS言語の「方言」です。 SASSとは何ですか? SASSはHAML (非常に簡潔なテンプレートエンジン)に似た言語ですが、CSSコードの作成を簡素化するように設計されています。 簡単に言えば、SASSはコードが特別なルビープログラムを使用して通常のCSSコードに変換される言語です。 この言語の構文は非常に柔軟であり、CSSで非常に望まれている多くのささいなことを考慮に入れています。 さらに、ロジック(@if、 each )、数学(数字、線、色を追加できます)も備えています。 おそらく、SCSSの一部の機能は冗長に見えるかもしれませんが、私の意見では、それらは不要ではなく、「予備」のままです。



SCSSとSASSの違いは、SCSSが通常のCSSコードに似ていることです。 SASSコード例:



 $blue: #3bbfce $margin: 16px .content-navigation border-color: $blue color: darken($blue, 9%) .border padding: $margin / 2 margin: $margin / 2 border-color: $blue
      
      





また、SCSSでも同じです。



 $blue: #3bbfce; $margin: 16px; .content-navigation { border-color: $blue; color: darken($blue, 9%); } .border { padding: $margin / 2; margin: $margin / 2; border-color: $blue; }
      
      





私は、SCSSにまだ慣れていない同僚にとって理解しやすいという事実を考慮して、SCSSを選択しました。 通常のCSSコードがSCSS構文に適合することにも注意する必要があります。



インストールと使用



最初にrubyをインストールする必要があります。 次に、 sass-gem



をインストールする必要があります(コンソールでgem install sass



)。 すべてが順調に進んだ場合、 sass



コンソールプログラムが使用可能になりました。 使用法のすべてのニュアンスについては、こちらsass --help



ご覧ください。 2つの基本的な機能についてのみ説明します。



-ウォッチ



--watch



キーでsassを実行すると、プログラムは指定したファイルを監視します。 それらが変更された場合、必要なすべてのcssファイルを自動的に再コンパイルします(まったくではなく、変更に関連するもののみ)。



次のプロジェクト構造があるとします。



 -- css ---- scss ------ style.scss ---- style.css
      
      





sassはcss/scss/*



すべての変更を追跡し、結果をcss/*.css



css/scss/*



保存する必要があります。 この場合、次のようにsassを実行しますsass --watch css/scss:css/.



。 つまり sass --watch []:[]







-更新



cssファイルを一度更新する必要がある場合は、-- --watch



代わりに--watch



使用し--update



。 監視は行われず、更新の必要性もチェックされません。



Less



とは異なり、 SASS



ブラウザでコードを直接コンパイルできないことに注意してください。 私の意見では、そのようなアプローチ(サーバーまたはPCコーダーでのコンパイル)が唯一の真のアプローチです。



練習する



だから、私たちは最も重要なことになります。 @import



から始めましょう。



@import



最初は、SCSSを使用する前に、サービスとして使用しなければならないエンジンのすべてのCSSコードは、最初の巨大なstyle.cssファイルにありました。 私のIDE(Netbeans(ちなみに、構文の強調表示用のプラグインです))は、かなりのブレーキをかけて動作しました。 しかし、誰もそれを多くの小さなファイルに分割し、必要に応じてそれらを1に接着することを望みませんでした。 SCSSはこの問題を自動的に解決します。



1つのニュアンスに注目する価値があります。 sassが特定のソースファイルではなくディレクトリにフィードされる場合、 _



始まるファイルのcssファイルは生成されません。 つまり style.scss



ファイルが存在するとstyle.scss



が作成されますが、 style.scss



ファイルは存在しません。



したがって、 _template.scss



ファイルまたはtemplate.scss



ファイルの内容を含めるために、次のように記述します。



 @import "template"; // 
      
      





最終的に、最初の大きなstyle.css



ファイルの代わりに、100を超える小さなscss



ファイルをscss



しました。 一見すると、そのような量は大きすぎてひどい苦痛につながるように見えるかもしれません。 ただし、必要なファイルは、便利なディレクトリ構造に基づいてすぐに見つかります。 さらに、キャッシングにより、このような「スキーム」の方が生産性が高いと思います。



@ネスト



最も望ましいCSS機能の1つは、セレクターのネストです。 例:



 #some { border: 1px solid red; .some { background: white; } } /* => */ #some { border: 1px solid red; } #some .some { background: white; }
      
      





別の例:



 input { border: 1px solid gray; background: white; &[type=text] { color: black; } &.some_class { display: none; } } /* => */ input { border: 1px solid gray; background: white; } input[type=text] { color: black; } input.some_class { display: none; }
      
      





&



記号は、親セレクターと同等です。 ブラウザーとしてInternet Explorer 7



がある場合、 ie_7



クラスを持つ<body>タグがあるとします。 次のコードを使用すると、すべての「ハック」と特別なコメントを取り除くことができます。



 $IE_7: 'body.ie_7'; //... .some { display: inline-block; #{$IE_7} & { zoom: 1; display: inline; } } /* => */ .some { display: inline-block; } body.ie_7 .some { zoom: 1; display: inline; }
      
      





$変数



変数は便利なものです。 それらは次のように定義されます。



 $some: red;
      
      





変数は定数ではなく、コードの過程で変更できます。最初の考えの1つは、 _const.scss



ファイルになりました。 _const.scss



ファイルには、すべての基本的な色、フォントサイズなどが含まれています。



 $link: #15157d; $link_bottom: $link; $input_font_size: 13px; $content_bg: #F1F1F1; $input_color: #4E4D4D; $input_color_placeholder: #959595; $text_color: black; ...
      
      





サイトのリンクの色は$link



と思われます。



 a { color: $link; } span.link { color: $link; text-decoration: underline; }
      
      





将来、リンクの色が変更されたことが判明した場合は、変数を1つ変更するだけです(CSSの場合、ファイルごとに、場合によっては選択的に自動置換する必要があります)。 突然、一部のcontacts



モジュールでリンクの色が異なることが判明したとします。 少なくとも2つの解決策があります。



最初のもの:



 $contacts_link: orange; //     $contacts_link  $link
      
      





第二



 $__link: $link; $link: orange; //   $link: $__link;
      
      





変数は類型化されていないため、同様に成功すると、文字列、数字、色を含めることができます。



@数学



数学は、色と数字の2つのカテゴリに分類されます。 数字から始めましょう。 簡単な例:



 .block { $block_width: 500px; padding: 5px; border: 1px solid black; width: $block_width - ( 5px * 2 ) - ( 1px * 2 ); }
      
      





必要に応じて、境界線を使用した埋め込みを変数に設定することもできます。 それはすべて、レイアウトの複雑さに依存します。



別の例:



 .block { $count: 10; $margin_left: 5px; $all_width: 1000px; width: $all_width; .sub_element { width: ( $all_width / $count ) - $margin_left; margin: 0 0 0 $margin_left; } }
      
      





この種の操作は非常に頻繁に使用されることに注意してください。 それらがなければ私は足がありません。



そして今、色。 色を追加、乗算できます:



 .some { $color: #010203; color: $color; border-color: $color - #010101; &:hover { color: #010203 * 2; } } /* => */ .some { color: #010203; border-color: #000102; } .some:hover { color: #020406; }
      
      





色を選ぶのが面倒なときは非常に便利です。 opacify



transparentize



などの機能も利用できます( 詳細 )。



@行



SASSは行をスタックでき、 #{}



構築もサポートします



 $image_dir: 'images/web/'; $page: 12; .some { background-image: url( $image_dir + 'pen.gif' ); &:before { content: " #{ $page }!"; } } /* => */ .some { background-image: url("images/web/pen.gif"); } .some:before { content: " 12!"; }
      
      





文字列操作の最大の使用法は、@ mixinや画像パスなどを示す変数に見られると思います。



記事



記事は非常に膨大であることが判明したため、私はそれを2つの部分に分けることにしました。 次の記事で検討します(構文と範囲):





参照資料






All Articles