CSS İpucu 19: Tüm Tarayıcılar İçin CSS İle Saydamlık(Opacity)

Daha önce birçok kez bu konuda bana e-posta geldi. Buraya yazmanın mantıklı olacağını düşündüm.

secici {
    opacity: .75; /* Standard: FF gt 1.5, Opera, Safari */
    filter: alpha(opacity=75); /* IE lt 8 */
    -ms-filter: "alpha(opacity=75)"; /* IE 8 */
    -khtml-opacity: .75; /* Safari 1.x */
    -moz-opacity: .75; /* FF lt 1.5, Netscape */
}

Örneği görmek için tıklayınız.

Kod aslında tek satır olması gerekir ki CSS 3 ile birlikte bu tek satır olacaktır. opacity: değer; tanımı ile halledeceğiz. Ama şu an yürürlükte olan tarayıcılar için yukarıdaki 5 satır kodu yazmalıyız.

Bu kodu yazmak o kadar da sorun değil, ama eğer bu kodu yazdığınız sayfanızı W3C doğrulamasından geçirirseniz aşağıdaki gibi bir hata alacaksınız.

donuklasma_val2

Bence W3C doğrulması çok önemli olmasada bazen şartlar doğrulama gerektirdiğinde(mesela müşteri istediğinde) bu sorunu çözmek için bir kaç yöntem var.

Bu yöntemlerden biri javascript fonksiyonu hazırlayıp bu fonksiyon yardımı ile elemanlarımızı saydamlaştırma;

function donuklastirma(element, donukDeger){
    var oe = document.getElementById(element);
    // donuklastirma degeri
    oe.setAttribute("style", "opacity:"+ donukDeger +";")
    if (oe.style.setAttribute) // IE icin
    oe.style.setAttribute("filter", "alpha(opacity="+ donukDeger*100 +");")
}

Örneği görmek için tıklayınız.

Diğer bir yöntemde ise ayrı bir css kodu yazıp bu kodu javascript ile ekleyebiliriz

<script type="text/javascript">
document.write('<link rel="stylesheet" type="text/css" media="screen" href="style/donuklastirma.css" />');
</script>

Sorun: opacity tanımı kapsadığı elemanın içeriğini de etkiler bunu engellemek için Robert Nyman’ın bir çözümü var. http://robertnyman.com/2010/01/11/css-background-transparency-without-affecting-child-elements-through-rgba-and-filters/ denemedim bir bakın isterseniz.

Kaynaklar

19 Yorum (Yorum Ekle)

  • Calibron diyor ki:

    Robert Nyman çözümü biraz karışık. Burada gördüğüm çok daha basit ve uygulanabilir geldi.
    http://mron.us/web-development/css3/css-backgroun…

  • fatihhayri diyor ki:

    robert Nyman ın bir çözümü var http://robertnyman.com/2010/01/11/css-background-… denemedim bir bakın isterseniz.

  • storcom diyor ki:

    Merhaba;
    opacity değerini sadece background için kullanmak istiyorum.Ancak div içindeki nesnelerinde opacity değeri düşüyor.Bunu nasıl sağlayabilirim.

  • Kemal diyor ki:

    CSS3 standart doğrulamasında opacity değerinin belirtilmesi yeterli. Tüm tarayıcılarda aynı sonucu alıyorsunuz ve W3C doğrulamasından başarıyla geçmektedir. Saygılar

  • mustafa diyor ki:

    fatih hocam opacity değeri zaten tüm tarayıcılarla uyumlu olan bir değeri.Diğer özel tanımlamaları neden kullanıyoruz acaba ?

    • fatihhayri diyor ki:

      ilk başta yazdığım kodda yanlarına ilgili kod satırının ne için yazıldığı yazıyor. Belki 5. ve 6. satırdakiler kaldırılabilir ama diğerleri gerekli.

  • hasan diyor ki:

    fatih hocam ben sadece opacity değerini kullanıyorum ve tüm tarayıcılarda çalışıyor.(ie'de test etme fırsatım olmadı ama orda da çalışacaktır.).Sadece opacity değerini kullanarak doğru sonuçları alıyorum.Sormak istediğim farklı tarayıcılar için verilen opacity tanımlayıcılarını gerçekten kullanmamıza gerek var mı?

    teşekkürler.

  • Fatih GÖK diyor ki:

    Tüm elemanları etkiliyor bu opacity. Böyle olacaksa neye yarar ki fireworkste opacity yaparım daha iyi. Herşey soluklaşıyor. bu kodlamada -moz, -khtml, -ms gibi tanımlamalar DW CSS editöründe yazarken çıkmıyor. acaba standart tanımlama değilmi. birde tam olarak -moz kaç yerde kullanılıyor. birkaç yerde denk geldi dikkatimi çekti. yoksa bu css nin korsan kodları mı var :)

  • falanca diyor ki:

    #secici içinde bu kodları kullandığım zaman her şeyin opacitysini etkiliyor. sadece arkaplanın seffaf olması için ne yapmalıyız?

    • fatih.hayrioglu diyor ki:

      Bunun için bir çözümyok ne yazık ki. Benim aklıama gelen alternatif çözümler var. Biri saydam png kullanmak diğer ise arkaplanı ayrı katman içeriği ayrı katman için alıp postion ile üst üste gitirmek ama. Bunun yerini tutumayacaktır

  • Oral ÜNAL diyor ki:

    Güzel bir yöntem. Özellikle tasarıma yeni yeni başlamaya niyetleniyorum. Böyle bir şey aklıma gelmezdi.

  • ahmet alp balkan diyor ki:

    Evet gerçekten akla gelmeyen bir çözüm (en azından benim aklıma gelmedi) kara kara düşünüyordum w3c validator ‘u nasıl geçeceğim diye :) Ellerinize sağlık.

Yorum yaz

Format: Yorum içinde kullanılabilecek HTML kodları: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

?