← from Blog

CSS Triangles Mixin trong Sass

August 20, 2013 3 min read

Trong thiết kế web các hình khối như hình tam giác, hình tròn, hình chữ nhật…thường được sử dụng khá thường xuyên. Khi muốn tạo các chú thích (tooltips), trước đây bạn thường sử dụng hình ảnh bằng việc sử dụng các công cụ như Photoshop, Fireworsk…điều này có thể làm cho bạn phải vất vả thay đổi khi muốn thiết kế lại vị trí của chúng, nhưng với CSS Triangles bạn cũng có thể tạo cho mình những chú thích linh động hơn.

Bài viết trước mình cũng đã giới thiệu sử dụng Sass đến với các bạn. Hôm nay mình sẽ hướng dẫn các bạn viết CSS Triangles sử dụng Sass.

Để bạn có thể dễ dàng làm quen với mixin này. Đầu tiên mình sẽ hướng dẫn các bạn sử dụng điều khiển kiểm soát @if

@if là một điều khiển của SassScript và được sử dụng dưới dạng lồng ghép nếu biểu thức trả về giá trị nào đó hoặc false hoặc null

$type: blue

p
	@if $type == red
		color: red
	@else if $type == green
		color: green
	@else if $type == blue
		color: blue
	@else
		color: white

Khi chuyển đổi thành CSS ta được

p {
  color: blue;
}

Và sử dụng điều hướng if ta có thể viết CSS Triangles sử dụng Sass

CSS Triangles Mixin trong Sass

/**
 * Dấu = bạn có thể thay thế bằng @mixin
 * nếu bạn sử dụng cú pháp SCSS
 */
=arrow($direction, $color, $size)
  $transparent: $size solid transparent
  $sizeborder: $size solid $color // Khai báo này sẽ giúp bạn tránh lặp lại code
  display: block
  height: 0
  width: 0

  // Mũi tên theo hướng lên trên
  @if $direction == "top"
    border:
      left: $transparent
      right: $transparent
      bottom: $sizeborder
  // Mũi tên theo hướng bên phải
  @else if $direction == "right"
    border:
      top: $transparent
      bottom: $transparent
      left: $sizeborder
  // Mũi tên theo hướng bên dưới
  @else if $direction == "bottom"
    border:
      top: $sizeborder
      right: $transparent
      left: $transparent
  // Mũi tên theo hướng bên trái
  @else if $direction == "left"
    border:
      top: $transparent
      right: $sizeborder
      bottom: $transparent
  // Mũi tên theo hướng trên bên phải
  @else if $direction == "top-right"
    border:
      top: $sizeborder
      right: $transparent
  // Mũi tên theo hướng trên bên trái
  @else if $direction == "top-left"
    border:
      top: $sizeborder
      left: $transparent
  // Mũi tên theo hướng dưới bên phải
  @else if $direction == "bottom-right"
    border:
      bottom: $sizeborder
      right: $transparent
  // Mũi tên theo hướng dưới bên trái
  @else if $direction == "bottom-left"
    border:
      bottom: $sizeborder
      left: $transparent

Sử dụng CSS Triangles Mixin

Việc sử dụng CSS Triangles mixin cực kì đơn giản.

/**
 * Dấu + bạn có thể thay thế bằng @include
 * nếu bạn sử dụng cú pháp SCSS
 */
.arrow-top
  +arrow(top, rgba(255, 10, 10, .5), 50px)

.arrow-right
  +arrow(right, rgba(255, 10, 10, .5), 50px)

Sử dụng với CSS3 Pseudo :before hoặc :after để tạo tooltips

.tooltip
  background-color: #e74c3c
  display: inline-block
  width: 500px
  padding: 20px
  position: relative

  &:before
    content: ""
    position: absolute
    top: 30px
    left: -20px
    +arrow(left, #e74c3c, 20px) // Bạn có thể chọn vị trí khác cho phù hợp

Với mixin này, mình hi vọng các bạn có thể cải tiến thêm các tooltips của website mình và khám phá thêm nhiều kĩ thuật mới qua việc sử dụng các điều khiển các Sass.