webサイト制作、便利アプリ、Apple製品について考えるブログ

Sassのmixinを使ってテキストのリンク色を使い分ける。

2020年11月23日 2021年02月21日

たぐと申します。東京のweb制作会社でプロデューサーをしています。

今回は、最近このブログのSassのコードでも使ったmixinの実例をさらっと紹介します。

具体的には、テキストのリンク色設定をシンプルにSassで定義する方法です。

テキストのリンク色を使い分ける。

これってよくやると思います。
デフォルトでは下記のように設定するケースって多いと思います。

a {

    &:link {
        color: #000;
    }

    &:visited {
        color: #000;
    }

    &:hover {
        color: #666;
    }

    &:active {
        color: #000;
    }
}

上記は、テキストのリンク色は、黒でマウスオーバーしたらグレーになる。
そんな感じの設定です。

ただ、実際には、リンク色の指定って、それを置く場所で結構変わります。
背景が暗いとき、ボタンの上に置くテキストだったり。

そういうときに、毎回毎回上記のような記載をCSSで作ってられないですよね?
そんな時にmixinは役立ちます。

以前紹介したように、

mixinは「最初に定義」、extendは「後から拡張」

です。

mixinの定義としては以下のような感じです。

@mixin linkColor($color) {
    &:link {
        color: $color;
    }

    &:visited {
        color: $color;
    }

    &:hover {
        color: $color;
    }

    &:active {
        color: $color;
    }
}

上記は「linkColor」というmixinを定義したものです。

linkColorは、$colorという引数を取り、その値でリンク色を定義しています。

では、それを使う場合にどうするか?

定義したmixinを適用したいSassのClassに入れ込んであげます。

.box-sample{
	a {
		text-decoration: none;
		@include linkColor($color: #f00);
	  }
}

こんな感じ。

@include linkColor($color: #f00);

この部分で定義したmixinを読み込んでいます。
関数みたいな感じですね。

これで、box-sampleというclass内の「a(アンカータグ)」のテキストは赤色(#f00)になります。

このような定義を作っておくことで、
.box-sampleだろうが、.card-recommendだろうが、
自身が定義したclass内で、

ここの中のリンクテキストはこの色にしたいなー

ということがあれば、リンクテキストの色を自在に操れます。

上記の例では、引数は1つで、「#f00」という赤色1色を指定していますが、引数を複数定義して、「&:visited」「&:hover」「&:active」それぞれの場合で、違う色を設定すること可能です。