Sass-배경 불투명도를 위해 16 진수를 RGBa로 변환


213

RGBa 예제를 완전히 수정 한 다음 Sass mixin이 있습니다 .

@mixin background-opacity($color, $opacity: .3) {
    background: rgb(200, 54, 54); /* The Fallback */
    background: rgba(200, 54, 54, $opacity);
} 

나는 적용 $opacity했지만 지금은 그 $color부분에 붙어 있습니다. 믹스 인에 보낼 색상은 RGB가 아닌 HEX입니다.

내 사용 예는 다음과 같습니다.

element {
    @include background-opacity(#333, .5);
}

이 믹스 인에서 HEX 값을 어떻게 사용합니까?

답변:


414

RGBA () 함수는 도 진수 RGB 값으로 한 칸 색상을 수용 할 수있다. 예를 들어, 이것은 잘 작동합니다.

@mixin background-opacity($color, $opacity: 0.3) {
    background: $color; /* The Fallback */
    background: rgba($color, $opacity);
}

element {
     @include background-opacity(#333, 0.5);
}

16 진수 색상을 RGB 구성 요소로 분리 해야하는 경우 red () , green ()blue () 함수를 사용하여 다음을 수행 할 수 있습니다.

$red: red($color);
$green: green($color);
$blue: blue($color);

background: rgb($red, $green, $blue); /* same as using "background: $color" */

나는 이것을 시도하고 r, b, g 기능을 시도했지만 작동하지 않는다고 맹세한다. Drupal 백엔드에서 동적 색상을 사용하고 있었지만 무언가를 깨뜨릴 수 있습니다. 아직도, 결국 그것을 분류하고 추가 연구 +1 후 발견 한 답변
Rick Donohoe

1
그러나 # ($ color + $ opacity)의 16 진수는 무엇입니까? -유용 할 수 있습니다. 할 수 있는?
somedirection

2
내가 아는 한 RGBA는 불투명도를 추가 하여 그 뒤에 요소를 볼 수 있습니다. standard hex를 사용하면이 작업을 수행 할 수 없습니다.
Richard Peck

감사. rgb 에서 16 진수를 시도해 본 적이 없었 습니다!
RayViljoen

2
더 나은 사용하기 rgba($color, $alpha)같은 rgba(#000000, 0.6)결과가 동일을 같이하고 바퀴를 재발견 할 필요가 없다. ;)
lbartolic

118

내장 믹스 인이 있습니다 : transparentize($color, $amount);

background-color: transparentize(#F05353, .3);

금액은 0에서 1 사이 여야합니다.

공식 Sass 문서 (모듈 : Sass :: Script :: 함수)


1
나는 이것을 좋아한다! 최신 브라우저 구현에 적합합니다.
Mike Kormendy

16
참고로 : $ amount는 설정하려는 값이 아니라 얼마만큼 뺄 것인가입니다
MMachinegun

3
90%그 결과를 얻기 위해 투명하게 만들고 싶은 역의 의미 인 것만 빼고는 큰 효과를 .1
보았습니다

기괴한. 문서를 읽지 않은 사람은 "투명"기능이 있다고 의심하지 않습니다. 매우 도움이됩니다, 감사합니다!
tobybot

좋은 대답입니다. 이것이 정답입니다. 감사. $colorTheme: hsl(289, 65%, 47%); $crossOutColor: transparentize($colorTheme, 0.5);나를 위해 일했다.
라이언

34

SASS에는 값을 평가하기 위한 내장 rgba () 함수 가 있습니다.

rgba($color, $alpha)

예 :

rgba(#00aaff, 0.5) => rgba(0, 170, 255, 0.5)

자신의 변수를 사용하는 예 :

$my-color: #00aaff;
$my-opacity: 0.5;

.my-element {
  color: rgba($my-color, $my-opacity);
}

출력 :

.my-element {
  color: rgba(0, 170, 255, 0.5);
}

6

이 솔루션을 사용해보십시오. 최고입니다 ... url ( github )

// Transparent Background
// From: http://stackoverflow.com/questions/6902944/sass-mixin-for-background-transparency-back-to-ie8

// Extend this class to save bytes
.transparent-background {
  background-color: transparent;
  zoom: 1;
}

// The mixin
@mixin transparent($color, $alpha) {
  $rgba: rgba($color, $alpha);
  $ie-hex-str: ie-hex-str($rgba);
  @extend .transparent-background;
  background-color: $rgba;
  filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#{$ie-hex-str},endColorstr=#{$ie-hex-str});
}

// Loop through opacities from 90 to 10 on an alpha scale
@mixin transparent-shades($name, $color) {
  @each $alpha in 90, 80, 70, 60, 50, 40, 30, 20, 10 {
    .#{$name}-#{$alpha} {
      @include transparent($color, $alpha / 100);
    }
  }
}

// Generate semi-transparent backgrounds for the colors we want
@include transparent-shades('dark', #000000);
@include transparent-shades('light', #ffffff);

5
귀하의 답변은 좋지만 불필요하게 복잡해 보입니다. 투명 배경 클래스가 무엇인지 설명 할 수는 있지만 투명 음영이 내 질문과 관련이 없다고 생각합니다. 투명 쉐이드 믹스 인을 사용하지 않는 경우 필요하지 않다고 생각합니까?
Rick Donohoe 2016 년

@RickDonohoe, 내가 기억하는 한 z-index : 1이며 투명한 배경은 IE <9의 대체입니다. m.Eloutafi는 다른 요구에 더 사용하기 위해 별도의 클래스에 넣었다고 생각합니다. "From :"으로 시작하는 곳에서 답을보십시오.
Roman M. Koss

2

변수와 알파 투명도의 색상을 혼합해야하고 rgba()함수 가 포함 된 솔루션을 사용하면 다음 과 같은 오류가 발생합니다

      background-color: rgba(#{$color}, 0.3);
                       ^
      $color: #002366 is not a color.
   
          background-color: rgba(#{$color}, 0.3);
                            ^^^^^^^^^^^^^^^^^^^^

이와 같은 것이 유용 할 수 있습니다.

$meeting-room-colors: (
  Neumann: '#002366',
  Turing: '#FF0000',
  Lovelace: '#00BFFF',
  Shared: '#00FF00',
  Chilling: '#FF1493',
);
$color-alpha: EE;

@each $name, $color in $meeting-room-colors {

  .#{$name} {

     background-color: #{$color}#{$color-alpha};

  }

}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.