[HTML & CSS General] CSS: 画像ナビゲーションのマウスオーバー処理を visibility: hidden と Sass の @for で作る

CSS が面倒なので @for で繰り返し書かなくてもすむようにする。

こんな感じでナビゲーションを用意。

<ul class="globalnav">
  <li class="globalnav-1"><a href="#"><img src="/img/globalnav/globalnav-1.png" alt="#"></a></li>
  <li class="globalnav-2"><a href="#"><img src="/img/globalnav/globalnav-2.png" alt="#"></a></li>
  <li class="globalnav-3"><a href="#"><img src="/img/globalnav/globalnav-3.png" alt="#"></a></li>
  <li class="globalnav-4"><a href="#"><img src="/img/globalnav/globalnav-4.png" alt="#"></a></li>
  <li class="globalnav-5"><a href="#"><img src="/img/globalnav/globalnav-5.png" alt="#"></a></li>
  <li class="globalnav-6"><a href="#"><img src="/img/globalnav/globalnav-6.png" alt="#"></a></li>
  <li class="globalnav-7"><a href="#"><img src="/img/globalnav/globalnav-7.png" alt="#"></a></li>
  <li class="globalnav-8"><a href="#"><img src="/img/globalnav/globalnav-8.png" alt="#"></a></li>
</ul>

CSS で背景にマウスオーバー時の画像を置いて、visibility: hidden で上記の画像を隠す。
のだけれども、数が増えると大変なので Sass の繰り返し構文 @for を使う。
(絶対配置の例)

ul.globalnav {
  li {
    position: absolute;
  }
  .globalnav-1 { top: 220px; left: 184px; }
  .globalnav-2 { top: 220px; left: 136px; }
  .globalnav-3 { top: 220px; left:  86px; }
  .globalnav-4 { top: 220px; left:  34px; }
  .globalnav-5 { top: 410px; left: 184px; }
  .globalnav-6 { top: 410px; left: 136px; }
  .globalnav-7 { top: 410px; left:  86px; }
  .globalnav-8 { top: 440px; left:  14px; }
  @for $i from 1 through 7 {
    .globalnav-#{$i} a {
      display: block;
      background: url(/img/globalnav/globalnav-#{$i}-on.png) no-repeat left top;
      &:hover img { visibility: hidden; }
    }
  }
}

through は、7 まで。
to とすると、6 までとなる。

補遺

CSS スプライトや @each などの例。