<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Advent Calendar 2011 &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/advent-calendar-2011/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Thu, 15 Dec 2011 01:08:54 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>LessにおけるMixin活用法</title>
		<link>https://blog.mach3.jp/2011/12/15/how-to-use-mixin-of-less.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Thu, 15 Dec 2011 01:08:54 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Advent Calendar 2011]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[LESS]]></category>
		<category><![CDATA[Sass]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2174</guid>

					<description><![CDATA[Less &#38; Sass Advent calendar 2011 の15日目です！ 今日はLessにおけるMixInの活用法について書いてみようと思います。 LessのMixinについて LessにおけるMixi [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="http://atnd.org/events/21919">Less &amp; Sass Advent calendar 2011</a> の15日目です！<br />
今日はLessにおけるMixInの活用法について書いてみようと思います。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-sCFbH4aDvWI/TubnZSOUsZI/AAAAAAAABa4/4EOC8L9YsbY/s400/20111215.png" alt="LessにおけるMixin活用法"/></figure>



<p></p>



<span id="more-2174"></span>



<h2 class="wp-block-heading">LessのMixinについて</h2>



<p>LessにおけるMixinというのは、簡単に言うと関数のようなもので、<br />
どこかで宣言しておけば、セレクタの中で呼び出すことが出来、<br />
結果としてその中身がセレクタ内に展開されます。</p>



<p>ごちゃごちゃとわかりづらいので、公式の例を拝借します。</p>


<pre class="wp-block-code"><span><code class="hljs">.rounded-corners (@radius: 5px) {
    border-radius: @radius;
    -webkit-border-radius: @radius;
    -moz-border-radius: @radius;
}
</code></span></pre>


<p>こんな感じに宣言しておきます。()の中身は引数と初期値です。<br />
セレクタ内で呼び出すときは…</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">#header {</span>
    .rounded-corners;
}
<span class="hljs-comment">#footer {</span>
    .rounded-corners( <span class="hljs-number">10</span>px );
}
</code></span></pre>


<p>こんな感じで呼び出すと、それぞれ展開されて下のコードのようになります。</p>



<p>&#8220;#header&#8221;の方は引数を渡していないので、初期値の5pxが適用されています。</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-comment">/* 出力結果 */</span>
<span class="hljs-selector-id">#header</span> {
    <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">5px</span>;
    <span class="hljs-attribute">-webkit-border-radius</span>: <span class="hljs-number">5px</span>;
    <span class="hljs-attribute">-moz-border-radius</span>: <span class="hljs-number">5px</span>;
}
<span class="hljs-selector-id">#footer</span> {
    <span class="hljs-attribute">border-radius</span>: <span class="hljs-number">10px</span>;
    <span class="hljs-attribute">-webkit-border-radius</span>: <span class="hljs-number">10px</span>;
    <span class="hljs-attribute">-moz-border-radius</span>: <span class="hljs-number">10px</span>;
}
</code></span></pre>


<h2 class="wp-block-heading">SassのMixinとの違い</h2>



<p>SassとLessの記法は非常に良く似ていますが、<br />
大きく異なる点として、変数の記号（@ではなく$）と、<br />
Mixinの書き方があげられます。</p>



<p>前述の例をSCSSで書くと、こんな感じになると思います。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">@mixin rounded-corners( $radius:<span class="hljs-number">5</span>px ){
    border-radius: $radius;
    -webkit-border-radius: $radius;
    -moz-border-radius: $radius;
    border-radius:$radius;
}

<span class="hljs-comment">#header {</span>
    @<span class="hljs-keyword">include</span> rounded-corners;
}
<span class="hljs-comment">#footer {</span>
    @<span class="hljs-keyword">include</span> rounded-corners( <span class="hljs-number">10</span>px );
}
</code></span></pre>


<p>Lessが通常のCSSクラスの記法と酷似しているのに対し、<br />
Sassの記法は、一発でMixinとわかるような書き方になっていますね。<br />
可読性の点ではSassの方に軍配があがりそうですが、<br />
この記法はLessの長所の一つでもあります。</p>



<h2 class="wp-block-heading">CSSクラスもMixinとして使える</h2>



<p>LessのMixinはCSSクラスと似ているだけではなく、<br />
普通のCSSクラスもMixinとして使用する事ができます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">// 普通のCSSクラス</span>
.hoge {
    background-color:<span class="hljs-comment">#333;</span>
    color:<span class="hljs-comment">#fff;</span>
}
.fuga {
    .hoge;
    font-weight:bold;
}
</code></span></pre>


<h3 class="wp-block-heading">出力結果</h3>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-class">.hoge</span> {
    <span class="hljs-attribute">background-color</span>:<span class="hljs-number">#333</span>;
    <span class="hljs-attribute">color</span>:<span class="hljs-number">#fff</span>;
}

<span class="hljs-selector-class">.fuga</span> {
    <span class="hljs-attribute">background-color</span>:<span class="hljs-number">#333</span>;
    <span class="hljs-attribute">color</span>:<span class="hljs-number">#fff</span>;
    <span class="hljs-attribute">font-weight</span>:bold;
}
</code></span></pre>


<p>特別な記述をしなくても、簡単にプロパティを継承出来てしまうわけですね。<br />
これは楽です。</p>



<h2 class="wp-block-heading">Mixinで多重継承する</h2>



<p>この仕組みは、OOCSSの様な作り方をCSSだけで行いたい場合に役立ちます。</p>



<h3 class="wp-block-heading">従来の書き方</h3>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-class">.box</span> {
    <span class="hljs-attribute">padding</span>:<span class="hljs-number">10px</span>;
    <span class="hljs-attribute">margin</span>:<span class="hljs-number">10px</span>;
}
<span class="hljs-selector-class">.dark</span> {
    <span class="hljs-attribute">background-color</span>:<span class="hljs-number">#111</span>;
    <span class="hljs-attribute">color</span>:<span class="hljs-number">#fff</span>;
}
<span class="hljs-selector-class">.rounded-corners</span> {
    <span class="hljs-attribute">-moz-border-radius</span>:<span class="hljs-number">5px</span>;
    <span class="hljs-attribute">-webkit-border-radius</span>:<span class="hljs-number">5px</span>;
    <span class="hljs-attribute">border-radius</span>:<span class="hljs-number">5px</span>;
}
</code></span></pre>


<p>例えばこのコードで黒くて角丸なボックスを要素に適用したい場合、<br />
次のようなHTMLになると思います。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"box dark rounded-corners"</span>&gt;</span>
    ...
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></span></pre>


<h3 class="wp-block-heading">Mixinによる継承</h3>



<p>ここでLessのMixinを使用して、一つ記述を書き足してみます。</p>


<pre class="wp-block-code"><span><code class="hljs">.mybox {
    .box;
    .dark;
    .roudned-corners;
}
</code></span></pre>


<p>こうすることにより、divにあてがうクラスはよりシンプルになります。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"mybox"</span>&gt;</span>
    ...
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</code></span></pre>


<p>オブジェクト指向的なCSSを書きたいけど、HTMLはスッキリさせたい。<br />
そんなケースによさそうです。</p>



<h3 class="wp-block-heading">デメリット</h3>



<p>HTMLはスッキリしますが、出力されるCSSはそうはいきません。<br />
（誰が見るわけでもないかもしれませんが）</p>



<p>呼び出される都度、何度でも展開されるわけなので、<br />
同じ事を繰り返して記述する、いささかしつこいCSSになるでしょう。<br />
些細な差かもしれませんが、ファイルサイズもかさみますね。</p>



<h2 class="wp-block-heading">extendをLESSに実装した例</h2>



<p>昨日、AdventCalender14日目の@hokacchaさんが、<br />
よりスマートなソリューションについて記事にされていたので、是非。</p>



<p><a href="http://d.hatena.ne.jp/hokaccha/20111214/1323821463">LESSにextendを実装してみた &#8211; hokaccha.hamalog v2</a></p>



<p>出力されるCSSが、大変いい感じになりますね。<br />
extend、よさげです。</p>



<p class="caution">
    LESS の1.4系より、extendが公式に導入されています。<br />
    <a href="https://github.com/less/less.js/blob/master/CHANGELOG.md#140-beta-1--2">less.js/CHANGELOG.md at master · less/less.js</a>
</p>



<h2 class="wp-block-heading">オマケ：無限ループの罠</h2>



<p>ちなみに、互いにそれぞれを呼び出すMixinを作ると、<br />
当たり前ですが無限ループに陥ってコンパイラが落ちる事もあると思いますので、<br />
ご注意ください。</p>



<p><em>良い子は真似しちゃだめ！</em></p>


<pre class="wp-block-code"><span><code class="hljs language-php">.hoge {
    color:<span class="hljs-comment">#fff;</span>
    .fuga;
}
.fuga {
    color:<span class="hljs-comment">#ccc;</span>
    .hoge;
}
</code></span></pre>


<h2 class="wp-block-heading">おわり</h2>



<p>それでは引き続き<a href="http://atnd.org/events/21919">Less &amp; Sass Advent calendar 2011</a>をお楽しみくださいませ。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
