LoginSignup
4
2

More than 5 years have passed since last update.

ボックスの角を画像で装飾するCSSを簡単にするmix-in

Last updated at Posted at 2014-09-19

画像を4つかどにそれぞれ入れたいときの指定がめんどいのでmixin化してみた。
もっと効率いい書き方ありそうだけどとりいそぎ。

※分かりにくいのであとで図とかつける予定です

Usage

1つのボックスだと2つしか生成できないので、ボックス内のdiv.innerなり見出しなりを利用します

article {
  & >.inner {
    @include box-corner_top(
        // 画像のパスはconfig.rbとかによって多少変わります
        '/img/img_corner_top-left.png',
        '/img/img_corner_top-right.png');
  }

  @include box-corner_bottom(
      // 画像のパスはconfig.rbとかによって多少変わります
      '/img/img_corner_bottom-left.png',
      '/img/img_corner_bottom-right.png');
}

Usage2 : ボーダーがつくとき

ボックスにボーダーが指定してあると、ボーダーが角画像の外側に来てしまうので、場合によってオフセットをかけます。

article {
  $border-width: 2px;

  border: $border-width solid gray;
  & >.inner {
    @include box-corner_top(
        // 画像のパスはconfig.rbとかによって多少変わります
        '/img/img_corner_top-left.png',
        '/img/img_corner_top-right.png',
        $border-width);
  }

  @include box-corner_bottom(
      // 画像のパスはconfig.rbとかによって多少変わります
      '/img/img_corner_bottom-left.png',
      '/img/img_corner_bottom-right.png'
      $border-width);
}

Usage3 : Retina対応

article {
  $screen-racio: 2.0;
  $img-scale: 1/$screen-racio;

  & >.inner {
    @include box-corner_top(
        // 画像のパスはconfig.rbとかによって多少変わります
        '/img/img_corner_top-left.png',
        '/img/img_corner_top-right.png',
        0, $img-scale);
  }

  @include box-corner_bottom(
      // 画像のパスはconfig.rbとかによって多少変わります
      '/img/img_corner_bottom-left.png',
      '/img/img_corner_bottom-right.png',
      0, $img-scale);
}

インターフェイス

  • box-corner($imgurl_top-left, $imgurl_top-right, $imgurl_bottom-left, $imgurl_bottom-right, $offsetBorder:0, $scale:1.0, $el:'> .inner')
  • box-corner_top($imgurl-left, $imgurl-right, $offset:0, $scale:1.0)
  • box-corner_top-left($imgurl, $offset:0, $scale:1.0)
  • box-corner_top-right($imgurl, $offset:0, $scale:1.0)
  • box-corner_bottom($imgurl-left, $imgurl-right, $offset:0, $scale:1.0)
  • box-corner_bottom-left($imgurl, $offset:0, $scale:1.0)
  • box-corner_bottom-right($imgurl, $offset:0, $scale:1.0)

ソースコード

_box-corner.scss
@import 'compass';

@mixin _box-corner_base() {
  position: relative;

  &:before,
  &:after {
    content: '';
    display: block;
    position: absolute;
  }
}

@mixin _box-corner_img($imgurl, $scale:1.0) {
  $width : image-width($imgurl) * $scale;
  $height : image-height($imgurl) * $scale;

  width: $width;
  height: $height;
  background: image-url($imgurl) no-repeat;
  @if $scale != 1.0 {
    background-size: $width $height;
  }
}

@mixin box-corner_top-left($imgurl, $offset:0, $scale:1.0) {
  @include _box-corner_base();

  &:before {
    @include _box-corner_img($imgurl, $scale);
    top: - $offset;
    left: - $offset;
  }
}
@mixin box-corner_top-right($imgurl, $offset:0, $scale:1.0) {
  @include _box-corner_base();

  &:after {
    @include _box-corner_img($imgurl, $scale);
    top: - $offset;
    right: - $offset;
  }
}

@mixin box-corner_bottom-left($imgurl, $offsetBorder:0, $scale:1.0) {
  @include _box-corner_base();

  &:before {
    @include _box-corner_img($imgurl, $scale);
    bottom: - $offset;
    left: - $offset;
  }
}
@mixin box-corner_bottom-right($imgurl, $offsetBorder:0, $scale:1.0) {
  @include _box-corner_base();

  &:after {
    @include _box-corner_img($imgurl, $scale);
    bottom: - $offset;
    right: - $offset;
  }
}

@mixin box-corner_top($imgurl_left, $imgurl_right, $offsetBorder:0, $scale:1.0) {
  @include _box-corner_base();

  &:before {
    @include _box-corner_img($imgurl_left, $scale);
    top: - $offset;
    left: - $offset;
  }
  &:after {
    @include _box-corner_img($imgurl_right, $scale);
    top: - $offset;
    right: - $offset;
  }
}

@mixin box-corner_bottom($imgurl_left, $imgurl_right, $offsetBorder:0, $scale:1.0) {
  @include _box-corner_base();

  &:before {
    @include _box-corner_img($imgurl_left, $scale);
    bottom: - $offset;
    left: - $offset;
  }
  &:after {
    @include _box-corner_img($imgurl_right, $scale);
    bottom: - $offset;
    right: - $offset;
  }
}



@mixin box-corner($imgurl_top-left, $imgurl_top-right,
    $imgurl_bottom-left, $imgurl_bottom-right,
    $offset:0, $scale:1.0, $el:'> .inner') {
  @include _box-corner_base();

  #{$el} {
    @include _box-corner_base();
    &:before {
      @include _box-corner_img($imgurl_top-left, $scale);
      top: - $offset;
      left: - $offset;
    }
    &:after {
      @include _box-corner_img($imgurl_top-right, $scale);
      top: - $offset;
      right: - $offset;
    }
  }
  &:before {
    @include _box-corner_img($imgurl_bottom-left, $scale);
    bottom: - $offset;
    left: - $offset;
  }
  &:after {
    @include _box-corner_img($imgurl_bottom-right, $scale);
    bottom: - $offset;
    right: - $offset;
  }
}
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2