w3schools scss mixin imports how define css cross-browser sass ruby-on-rails-3.1 mixins

scss - sass-- watch



Sass mixin para transparencia de fondo a IE8 (3)

Creo que encontré un problema similar cuando quería pasarle una URL al mixin. En lugar de enviar solo la url, envié el parámetro url completo como parámetro a la mezcla. Si entiendes lo que quiero decir?

ejemplo:

@mixin bg($url) background: #000 $url repeat-x

inscribed de:

@mixin bg($url) background: #000 url($url) repeat-x

Además, es posible que esto no sea el adecuado para su aplicación, pero generalmente trabajo con ese problema usando la opacidad:

@mixin transparent_bg($hex, $a){ /* for IEGR8 */ filter:alpha(opacity=$a) zoom: 1; /* for modern browsers */ background-color: $hex; opacity: ($a*10) }

Soy nuevo en Sass y estoy luchando con esto. No puedo obtener el color para renderizar en ambos hex (para IE) y rgba . Cada pequeña pieza me frustra porque aún no domino la sintaxis, y los resultados de Google para Sass aún son escasos.

Aquí está el mixin:

@mixin transparent($hex, $a){ /* for IEGR8 */ background: transparent; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#{$a}#{$hex},endColorstr=#{$a}#{$hex}); zoom: 1; /* for modern browsers */ background-color: rgba(#{$hex},.#{$a}); }

De modo que @include transparent(#FFF,.4) debería producir el código transparente compatible con el navegador que se muestra a continuación:

background: transparent; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#40FFFFFF,endColorstr=#40FFFFFF); zoom: 1; background-color: rgba(100,100,100,.40);

He estado comentando lo siguiente por un par de horas:

  • El # requerido para el formato #RGB.
  • El . requerido para rgba alpha.

Ambos deben estar incluidos para la llamada a rgba() , sin embargo, el # no se puede incluir para IE #AARRGGBB o se verá como #AA#RRGGBB , y el. no se puede incluir para IE o rechaza #.AARRGGBB .

¿Me estoy perdiendo una manera mucho más simple de hacer esto? ¿Se puede hacer esto con la manipulación de cadenas Sass o cualquier función de fundición de color ligeramente inteligente en Sass que ya maneja esto para mí?

Muchas gracias.


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

NOTA : ie-hex-str solo está disponible en versiones recientes, no estoy seguro de cuándo se introdujo


Esto probablemente sea tan a prueba de balas como obtendrás sin una cuña adecuada.

Para construir sobre la respuesta de Seutje , esto le permite usar la transparencia de ms-filter si está haciendo background-color en IE, pero si usted conoce el color del elemento detrás del elemento que desea hacer transparente, puede usar Función de "mezcla" de Sass para mezclar los dos colores y obtener transparencia falsa, para cualquier tipo de color. Eso significa fronteras y texto y todo lo que jive. Sigue siendo un retroceso manual, pero te dará el color exacto que intentas simular con un hexágono sólido.

SCSS:

@mixin alpha-color($foreground-color, $property: ''background-color'', $background-context-color: #fff) { #{$property}: mix( fade-in($foreground-color, 1), $background-context-color, percentage(opacity($foreground-color)) ); // Browsers without color opacity #{$property}: $foreground-color; // Decent browsers @if $property == ''background-color'' { .lt-ie9 & { // IE8 has background filters; use them instead #{$property}: transparent; $ie-hex: ie-hex-str($foreground-color); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#{$ie-hex},endColorstr=#{$ie-hex}); zoom: 1; } } }

Para obtener border-color: rgba(255, 0, 0, 0.5) sobre un fondo azul, lo usaría como:

.blue-container { $color-bg: rgb(0,0,255); background-color: $color-bg; .transparent-red-element { @include alpha-color(rgba(255, 0, 0, .65), border-color, $color-bg); } }

Sass convierte automáticamente el 100% de los colores de opacidad en un código hexadecimal, de ahí el fade-in del 100%.

Los únicos navegadores sin opacidad de color son IE8 <= 8 y Opera <= 9.6 , e IE 8 tiene filtros, por lo que esto solo ayuda con los colores que no sean de background-color . El principio es que se mezclan los colores de fondo y primer plano en un hexágono plano.

ie-hex-str tiene ahora un año, así que definitivamente lo tendrás.