LESSプログラム可胜なスタむル蚀語

私はCSSが奜きではありたせん。 それはシンプルで簡単です。 これはむンタヌネットの原動力ですが、あたりにも制限されおおり、管理が困難です。 今床は、この蚀語を敎理し、LESSで動的CSSを䜿甚しおより䟿利にするずきです。
私の立堎を䟋で説明したす。 なぜ、FF9F94を䜿甚しお濃い桃色を取埗するのではなく、埌で䜿甚するためにその色の倀を倉数に保存しないでください。 サむトを再描画するには、1か所で倉数の倀を倉曎するだけで十分です。
぀たり、CSSで少しプログラミングずロゞックを䜿甚しおより匷力なツヌルにするず、非垞に゚レガントになりたす。 LESSを䜿甚しおこれがすべお可胜であるのは良いこずです。

LESSずは䜕ですか


LESSはCSSアドオンです。 ぀たり、CSSコヌドは有効なLESSですが、远加のLESS芁玠はプレヌンCSSでは機胜したせん。 既存のCSSは既に実行可胜なLESSコヌドであるため、これは玠晎らしいこずです。これにより、新しいテクノロゞヌを導入するためのしきい倀が䜎くなりたす。
LESSは、倚くの䟿利な動的プロパティをCSSに远加したす。 倉数、挔算、関数に䌌た芁玠、䞍玔物を導入したす。 モゞュヌル圢匏でスタむルシヌトを䜜成する機胜により、倚くのトラブルが軜枛されたす。

LESSの䜿甚方法


LESSを䜿甚するには2぀の方法がありたす。 LESSファむルを䜜成し、オンザフラむでJavascriptを䜿甚しお倉換するか、事前にコンパむルしお結果のCSSファむルを䜿甚できたす。 「コンパむル」ずいう蚀葉を恐れないでください私はい぀も䜿っおいたす。それは非垞に単玔です。

LESSずJavascriptファむルを䜿甚したす

たず、LESS Javascript Webサむトからファむルをダりンロヌドし、他のjsスクリプトず同様にペヌゞに添付する必芁がありたす。

<script src="less.js" type="text/javascript"></script> 

次に、拡匵子が.lessのファむルを䜜成し、次のコヌドで添付したす。

 <link rel="stylesheet/less" type="text/css" href="style.less"> 

JSの前にLESSファむルを必ず添付しおください。
これで、LESSファむルは通垞のCSSず同じように機胜したす。

LESSファむルのコンパむル

この方法は少し面倒ですが、時にはより望たしい方法です。 各ペヌゞの読み蟌み時にコヌドを倉換しないために、結果のCSSファむルを䜿甚できたす。 コンバヌタヌWindows甹-WinlessおよびMac甹LESS.app 。

LESSのパワヌを䜿いこなす


最埌に、楜しみたしょう-LESSコヌドを曞きたす。 ご芧のずおり、コヌドはCSSに䌌た構文を䜿甚しおいるため、コヌドの読み取りず理解が非垞に簡単です。

倉数

LESSの倉数は、PHP、JS、および他のほずんどのプログラミング蚀語ず同じように機胜したす。 これらを䜿甚しお倀を保存し、必芁なずきに倀自䜓ではなく倉数を䜿甚できたす。

 @header-font: Georgia; h1, h2, h3, h4 { font-family: @header-font; } .large { font-family:@header-font; } 

䞊蚘の䟋では、倉数@ header-fontを宣蚀し、そこに倀「Georgia」を蚘述したす。 これで、Georgiaフォントを蚭定するずきにこの倉数を䜿甚できたす。 Trebuchet MSがヘッダヌに適しおいるず刀断した堎合、ファむル党䜓を芋る必芁はなく、倉数の倀を倉曎するだけです。
サむトの色を定矩する際に倉数が非垞に圹立぀こずがわかりたした。 叀き良き時代それほど昔ではなかったに、私は次のようなものを䜿甚したした。

 /* Colors for my Website #ff9900 - Orange - used for links and highlighted items #cccccc - Light Gray - used for borders #333333 - Dark Black - Used for dark backgrounds and heading text color #454545 - Mid Black - Used for general text color */ body { background: #333333; color: #454545; } a { color:#ff9900; } h1, h2, h3, h4, h5, h6 { color: #333333; } 

ここのように色を文曞化しおも䜕も問題はありたせん。良い習慣です。問題は、文曞化がスタむルの機胜ずは䜕の関係もないこずです。 2000行のコヌドの埌に​​色を倉曎し、3567行を倉曎する堎合、すべおの色ずドキュメントを修正するのは非垞に困難です。
LESSを䜿甚するず、ワヌクフロヌを同時に倉曎および文曞化できたす。

 /* Colors for my Website */ @color-orange: #ff9900; @color-gray_light: #cccccc; @color-black_dark: #333333; @color-black_medium: #454545; body { background: @color-black_dark; color: @color-black_medium; } a { color:@color-orange; } h1, h2, h3, h4, h5, h6 { color: @color-black_dark; } 


可倉範囲

倉数のスコヌプは、倉数が利甚可胜な堎所を瀺したす。 LESSファむルの先頭で倉数を定矩するず、その埌に蚘述されたコヌドで䜿甚できるようになりたす。
CSSルヌル内で倉数を定矩するこずもできたす。 この堎合、倉数はこのルヌル倖では䜿甚できず、ロヌカルで䜿甚できたす。

 a { @color: #ff9900; color:@color; } button { background: @color; } 

この䟋では、゚ラヌのためLESSは倉換されたせん。ボタン芁玠内で䜿甚するための色は定矩されおいたせん。 倉数が芁玠の倖偎ず別の芁玠の内偎で宣蚀されおいる堎合、倉数はロヌカルでのみ䜿甚可胜になりたす。

 @color: #222222; a { @color: #ffffff; color:@color; } button { background: @color; } 

この堎合、リンクは癜く塗られ、ボタンの背景は黒になりたす。

倉数内の倉数

PHPで゚ンコヌドした堎合、別の倉数で倉数名を宣蚀できるこずがわかりたす。

 @color-chirstmas_red: #941f1f; @name-of-color: "color-chirstmas_red"; color: @@name-of-color; 

個人的には、倉数内の倉数はクロヌゞャヌなしではほずんど圹に立たないため、これをほずんど䜿甚したせんが、これを䜿甚するスマヌトな䟋があるず確信しおいたす。

定数ず倉数

読んだこずずは反察に、LESSの倉数は定数に䌌おいるこずに泚意するこずが重芁です。 これは、倉数ずは異なり、䞀床しか定矩できないこずを意味したす。

運営

LESSの操䜜を䜿甚しお、非垞に正確な制埡を実珟できたす。 アむデアは簡単です

 .button{ @unit: 3px; border:@unit solid #ddd; padding: @unit * 3; margin: @unit * 2; } 

䞊蚘のコヌドは、 ナニット倉数を3pxに蚭定したす。 次に、この倀をフレヌムの幅に蚭定したす。むンデントは幅の3倍で、マヌゞンは2です。
乗算、陀算、加算、枛算の挔算を䜿甚できたす。 蟺の幅を時蚈回りに広げるフレヌムでブロックを䜜成するには、次のコヌドを䜿甚できたす。

 .box{ @base_unit: 1px; border: @base_unit @base_unit + 1 @base_unit + 2 @base_unit + 3 } 


カラヌマネゞメント

LESSの私のお気に入りの機胜はカラヌマネヌゞメントです。 色を混合する操䜜ず、色を操䜜するためのいく぀かの特別な機胜を䜿甚できたす。

カラヌ操䜜

色の倀を倉曎する堎合は、別の色を枛算たたは远加するこずでこれを実行できたす。

 @color: #941f1f; button { background: #941f1f + #222222; border: #941f1f - #111111; } 

䞊蚘のバックグラりンド操䜜により、各HEX倀が2ず぀増加したす。結果は「B64141」-元の色の明るいバヌゞョンです。 フレヌム操䜜により、各HEX倀が1ず぀枛り、「830E0E」のような暗い色が生成されたす。
実際には、基本色から始めお、少し暗くしたり明るくしたりする必芁がある堎合が倚くありたす。

 @color-button: #d24444; input.submit { color:#fff; background:@color-button; border:1px solid @color-button - #222; padding:5px 12px; } 

このコヌドは、境界線がわずかに暗い赀いボタンを䜜成したす。 これは䞀般的な状況であり、1色のみを定矩するず倧きな助けになりたす。
画像

倉数の嚁力は、以䞋でより明確になりたす。 ボタンの色を倉曎する堎合、@ color-buttonの倀を緑に倉曎するず、背景色が倉曎されるだけでなく、ストロヌクが緑の暗いバヌゞョンに眮き換えられたす。
画像

これの別の優れた甚途は、グラデヌションを䜜成するこずです。 通垞、䞭間色を遞択し、それに基づいおグラデヌションを宣蚀したす。 最初は少し明るく、最埌は少し暗くしたす。 結果は、次のような玠晎らしい遷移になりたす。

 @color: #faa51a; .button { background: -webkit-gradient(linear, left top, left bottom, from(@color + #151515), to(@color - #151515)); background: -moz-linear-gradient(top, @color + #151515, @color - #151515); } 

画像


カラヌ関数

色の操䜜にはさらに倚くのオプションがありたす。 LESSでは、チャンネルレベルで操䜜できたす。 色を明るくしたり、暗くしたり、飜和させたり、挂癜したり、回転させたりするこずができたす。 次の䟋ず写真を芋お、それぞれの機胜を理解しおください。

 @color: #3d82d1; .left_box { background:lighten(@color, 20%); } .right_box { background:darken(@color, 20%); } 

画像


 @color: #3d82d1;.left_box { background: desaturate(@color, 18%); } .middle_box { background: @color; } .right_box { background: saturate(@color, 18%); } 

画像


 @color: #3d82d1;.left_box { background: spin(@color, 25%); } .middle_box { background: @color; } .right_box { background: spin(@color, -25%); } 

画像


色情報を取埗する

LESSの各色はHSL色盞、圩床、明床に倉換され、チャンネルレベルを制埡できたす。 これにより、色をより埮劙に操䜜したり、色情報を盎接取埗したりできたす。

 @color = #167e8a; hue(@color); saturation(@color); lightness(@color); 

これはささいなこずのように思えるかもしれたせんが、HEX倀を入力するだけでこの情報が必芁なのはなぜですか あなたが普通の人なら、その堎でHEXカラヌを解読するこずはできたせん。 HEX倀はRGBスペクトルを衚したす。最初の2文字は赀の量を制埡し、次の2文字は緑の量を、最埌の2文字は青の量を制埡したす。
RGB255,0,0であるため、ff0000が赀であるこずは明らかです。 赀、緑、青の色調はありたせん。 ただし、1f6b2dが衚瀺される堎合、暗緑色であるこずを解読するのは困難です。 HSL衚珟では、色盞トヌンがすべおを制埡し、色に名前を付けるだけで、残りはトヌンを蚭定するだけですこれは完党に真実ではありたせんが、すべおがそのように起こりたす。
それを念頭に眮いお、e147d4のような玠敵なマれンタ色を芋぀けた堎合、たったく同じ色盞の異なる色を簡単に芋぀けるこずができたす。 e147d4のクリヌミヌでパステル色のバヌゞョンを䜜成するずしたす。ここでできるこずは次のずおりです。

 @color: #c480bd; .class { background-color: desaturate(spin(@color, 18), 12%);} 

新しい色のトヌンは同じですが、圩床ず明るさが異なりたす。 結果はc480bfになり、HEXのみを䜿甚しおe147d4から切り替えるこずははるかに困難です。

機胜の組み合わせ

LESSを䜿甚するず、関数内で関数を䜿甚できたす。したがっお、スピンを色付けしおスピンする必芁がある堎合は、次のようにしたす。

 @color: #c480bd; .class { background-color: desaturate(spin(@color, 18), 12%);} 


ネスティング

CSSを蚘述するずき、カスケヌドスタむルを䜿甚したす。 蚘事内でのみ段萜の䜙癜を倉曎するには、次のコヌドを䜿甚できたす。

 article.post p{ margin: 0 0 12px 0; } 

このアプロヌチには䜕の問題もありたせんが、リンク、匕甚、芋出しなどのスタむルも倉曎する必芁がある堎合。 蚘事内でのみ、各芁玠に接頭蟞「article.post」を䜿甚する必芁がありたす。 これにより、コヌドの蚘述がより退屈になり、読みにくくなりたす。
LESSでは、これらのルヌルを埋め蟌むこずができたす。これにより、スタむルのより短くお論理的なバヌゞョンが提䟛されたす。 䟋

 article.post { p{ margin: 0 0 12px 0; } a { color: red; } a:hover { color: blue; } img { float:left; } } 

むンデントはオプションですが、コヌドを読みやすくしたす。 ネストレベルは制限されたせん。

 a { color:red; } p { margin:0px; } article { a { color: green; } p { color: #555; a { color:blue; } } } 


䞍玔物ミックスむン

LESSの䞍玔物により、冗長なコヌドを入力する手間が省けたす。 䞊郚の角だけが䞞くなっおいる䞞いフレヌムを䜜成する必芁がありたしたか

 .tab { -webkit-border-top-left-radius: 6px; -webkit-border-top-right-radius: 6px; -moz-border-radius-topleft: 6px; -moz-border-radius-topright: 6px; border-top-left-radius: 6px; border-top-right-radius: 6px; } 

そのため、毎回... LESSを䜿甚するず、混合物を䜜成するこずでこれらすべおを倉曎できたす。 䞍玔物-ルヌルずしお任意の芁玠に远加できる再利甚可胜な芁玠。 たた、新しい構文を孊ぶ必芁もありたせん。

 .rounded_top { -webkit-border-top-left-radius: 6px; -webkit-border-top-right-radius: 6px; -moz-border-radius-topleft: 6px; -moz-border-radius-topright: 6px; border-top-left-radius: 6px; border-top-right-radius: 6px; } .tab { background: #333; color:#fff; .rounded_top; } .submit { .rounded_top; } 

䞊蚘のコヌドでは、.rounded_top芁玠を定矩しお䞊郚の角を䞞めたした。 それを他の芁玠に混合物.tabを参照ずしお远加するずき、基本的に䜜成したルヌルをむンポヌトしたす。 この構文のおかげで、䞍玔物ずしお任意の芁玠を䜿甚できたす。

 .rounded_top { -webkit-border-top-left-radius: 6px; -webkit-border-top-right-radius: 6px; -moz-border-radius-topleft: 6px; -moz-border-radius-topright: 6px; border-top-left-radius: 6px; border-top-right-radius: 6px; } .tab { background: #333; color:#fff; .rounded_top; } .submit { .tab; background: red; } 

.submit芁玠のスタむルは、䞊郚の䞞い角、癜い色、赀い背景です倀333が再定矩されおいたす。

パラメヌタを含む䞍玔物

パラメヌタを持぀䞍玔物は耇雑に聞こえたすが、非垞に簡単な方法で問題を解決したす。 䞊蚘の䟋では、䞊隅に半埄6ピクセルの芁玠を定矩する方法を説明したした。 そしお、半埄3pxの芁玠を䜜成したい堎合はどうでしょうか すべおのピクセル倀に察しお異なる䞍玔物を宣蚀する必芁がありたすか もちろん、答えはノヌです。パラメヌタヌに䞍玔物を䜿甚する必芁がありたす。
関数を呌び出すず倀を倉曎できるため、関数に䌌おいたす。 サンプルをborder-radiusで曞き換えお、どのように機胜するかを芋おみたしょう。

 .rounded_top(@radius) { -webkit-border-top-left-radius: @radius; -webkit-border-top-right-radius: @radius; -moz-border-radius-topleft: @radius; -moz-border-radius-topright: @radius; border-top-left-radius: @radius; border-top-right-radius: @radius; } .tab { background: #333; color:#fff; .rounded_top(6px); } .submit { .rounded_top(3px); } 

䞊蚘のコヌドでは、.tabの半埄は6pxであり、.submit芁玠は3pxの倀を取埗したす。

暙準倀

通垞は同じ境界半埄を䜿甚したすが、堎合によっおは異なる境界が必芁な堎合は、䞍玔物を暙準倀に蚭定する必芁がありたす。

 .rounded_top(@radius:6px) { -webkit-border-top-left-radius: @radius; -webkit-border-top-right-radius: @radius; -moz-border-radius-topleft: @radius; -moz-border-radius-topright: @radius; border-top-left-radius: @radius; border-top-right-radius: @radius; } .tab { background: #333; color:#fff; .rounded_top; } .submit { .rounded_top(3px); } 

この䟋では、.tabはデフォルト倀の6pxを取埗し、.submitは3pxを取埗したす。

耇数のパラメヌタヌ

耇数のパラメヌタヌを䜿甚しお、より耇雑な䞍玔物を決定するこずもできたす。

 .radius(@radius:6px) { -webkit-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius; } .button(@radius:3px, @background: #e7ba64, @padding: 4px) { .radius(@radius); background:@background; border: 1px solid @background - #222; padding: @padding; } .read_more { .button(0px); } 

この䟋では、.read_moreクラスは、4pxむンデント、背景色e7ba64、およびborder-radius wry 0pxでフォヌマットされおいたす。

䞀床にすべおの匕数を䜿甚したす

匕数を䜿甚するずきの別のオプションは、匕数を結合するこずです。 CSSの簡略プロパティには耇数の倀があり、次々に曞き蟌たれたす。

 div { border:1px solid #bbb; } 

必芁なすべおの芁玠にグレヌの境界線を蚭定するには、この関数を䜿甚できたす。

 .gray_border(@width: 1px, @type: solid, @color: #bbb){ border:@arguments; } div { .gray_border(2px, dashed); } 

@argumentsは、すべおのパラメヌタヌを所定の順序で次々に衚瀺する特別なキヌワヌドです。 䞊蚘のLESSコヌドの結果は次のようになりたす。

 div { border:2px dashed #bbb; } 


パラメヌタなしのパラメトリック䞍玔物

パラメヌタなしでパラメトリック䞍玔物を䜿甚するこずもできたす。 これは、CSSで混合物を出力する必芁はないが、䜿甚される芁玠に芏則を適甚する堎合に䜿甚されたす。

 .alert { background: red; color: white; padding:5px 12px; } .error_message { .alert; margin: 0 0 12px 0; } 

䞊蚘のコヌドのCSSは次のようになりたす。

 .alert { background: red; color: white; padding:5px 12px; } .error_message { background: red; color: white; padding:5px 12px; margin: 0 0 12px 0; } 

.alertクラスを非衚瀺にするには、空のパラメヌタヌを蚭定する必芁がありたす。

 .alert() { background: red; color: white; padding:5px 12px; } .error_message { .alert; margin: 0 0 12px 0; } 

完成したCSSは次のようになりたす。

 .error_message { background: red; color: white; padding:5px 12px; margin: 0 0 12px 0; } 

これは䞻に、CSSファむルのサむズを瞮小するために䜿甚されたす。

名前空間

プログラミング蚀語の名前空間は通垞、機胜が䌌おいる芁玠をグルヌプ化するために䜿甚されたす。 コヌドを䞍玔物ず組み合わせるこずにより、LESSでこれを実珟できたす。

 #my_framework { p { margin: 12px 0; } a { color:blue; text-decoration: none; } .submit { background: red; color: white; padding:5px 12px; } } 

フレヌムワヌクに基づいお新しいサむトで䜜業を開始するず、倚数の#my_frameworkを远加しお、名前空間を詰たらせるこずなく䜿甚できたす。

 .submit_button { #my_framework > .submit; } 

たた、トピックをすばやく倉曎および調敎できるようにする優れた方法です。 䌚瀟甚に耇数のテヌマを開発しおいる堎合、その堎でテンプレヌトを倉曎するには、バンドルを䜿甚しおすべおを1぀のLESSファむルに入れるこずができたす。

 #fw_1 { p { margin: 12px 0; } a { color:blue; text-decoration: none; } .submit { background: red; color: white; padding:5px 12px; } } #fw_2 { p { margin: 8px 0; } a { color:red; text-decoration: underline; } .submit { background: blue; color: white; padding:8px 20px; } } .submit_button { #fw_2 > .submit; } 


文字列補間

文字列補間は、この任意の文字列を倉数に栌玍し、プロパティ倀で䜿甚できるこずを意味する別の凝った蚀葉です。

 @url: "http://mycompany.com/assets/";background-image: url("@{url}/sprite.png"); 

これは、集䞭化されたフレヌムワヌクを䜜成するずきに圹立ちたす。

シヌルド

有効なCSSIEのルヌルではないプロパティたたは倀を䜿甚する必芁がある堎合がありたす。 グラデヌションの䟋では、Internet Explorerナヌザヌのこずは気にしおいないこずに気づいたかもしれたせん。
IEでグラデヌションを䜜成する堎合は、次のようにする必芁がありたす。

 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#666666', endColorstr='#444444'); 

このCSSは無効であるため、LESSはコンパむルされたせん。 この堎合、この倀を゚スケヌプしお、LESSでスキップできるようにするこずができたす。

 .button { background: -webkit-gradient(linear, left top, left bottom, from(#666666), to(#444444)); background: -moz-linear-gradient(top, #666666, @color - #444444); filter: ~"progid:DXImageTransform.Microsoft.gradient(startColorstr='#666666', endColorstr='#444444')";} 

必芁なのは、セクションを匕甚笊で囲み、その前にチルダを眮くこずです。 このセクションは、LESSプロセッサを通過せず、砎棄されたせん。

むンポヌト

通垞のCSSず同様に、ファむルをむンポヌトできたす。 LESSでは、次の構文を䜿甚しおCSSずLESSをむンポヌトできたす。

 @import "reset.min.css"; @import "framework.less"; @import "widgets"; 

最初のむンポヌトは非​​垞に明癜です。 reset.min.cssで定矩されたCSSルヌルを、LESSパヌサヌを解析せずにむンポヌトしたす。
2番目のむンポヌトは、framework.lessのコンテンツを挿入し、他のLESSルヌルず同様に凊理したす。
3番目のむンポヌトは、2番目ず同じように機胜したす。 拡匵機胜がむンストヌルされおいない堎合、プリプロセッサはそれをLESSファむルず芋なしたす。

コメント

圓然、CSSず同様に、LESSでも耇数行のコメントを䜿甚できたす。 たた、LESSでは、ダブルバックスラッシュを䜿甚しお、PHPたたはJavascriptのように単䞀行コメントを䜿甚できたす。

 /* This is my main LESS file. It governs how most of the site looks. /* body { padding:0px; // This resets the body padding } 


䜕が欠けおいたすか


LESSがおいしいずいう事実にもかかわらず、ただ䜿い始めたずき、あたり心配しおいたせんが、いく぀かの欠点がありたす。
私が芋たい機胜の1぀は、前凊理です同意する、無意味に聞こえたす。アナラむザヌを通過しないように文字列を゚スケヌプする方法を芚えおいたすか 珟圚の方法では、色を倉曎できるグラデヌションを䜿甚できたせん。

 filter: ~"progid:DXImageTransform.Microsoft.gradient(startColorstr='#faa51a', endColorstr='#f47a20')"; 

このコヌドはうたく機胜したすが、色はハヌドコヌディングする必芁がありたす。 文字列が゚スケヌプされおいる堎合、倉数は凊理されたせん。 CSSファむルに送信される前に、゚スケヌプされた文字列の倉数が凊理されるオプションがあるず䟿利です。

おわりに


新しい技術や方法ず同様に、虐埅が発生したす。 Web 2.0時代の倜明けの鏡のようなロゎずガラスのボタンを芚えおいたすか
すべおのルヌルを囲む必芁はありたせん。すべおの倉数を䜜成したり、フレヌムの幅だけの䞍玔物を䜜成したりする必芁はありたせん。
LESSの優れた機胜をい぀䜿甚しないかわからない堎合、LESSコヌドは通垞のCSSず同じくらい読みにくくなり、保守が難しくなりたす。 秘Theは、これらの関数ずメ゜ッドをい぀䜿甚するか、そしおい぀昔のCSSが優れおいるかを知るこずです。
さらに、LESSファむルを䜿甚しないこずをお勧めしたす。 それには䜕の問題もありたせんが、LESSファむルをダりンロヌドしお凊理する理由はありたせん。 確かに、スクリプトは非垞に高速ですが、それなしではより高速になるず確信しおいたす。 私は通垞、すべおのサむトをLESSで開発し、出力ファむルを取埗しお圧瞮し、通垞のCSSファむルを䜿甚したす。

webdesign.tutsからの蚘事の翻蚳+

Source: https://habr.com/ru/post/J136525/


All Articles