Geçen haftasonu c.tesi günü(28 Temmuz 2012) jstanbul etkinliğinde sunduğum “CSS3 Javascript’ten Rol Çalıyor” makalesidir. Etkinlikte internet erişimim olmadığı için örnekleri gösterememiştim, burada bağlantıları da paylaşıyorum umarım yararlı olur.

Sunuma erişmek isteyenlere sunumun linki.

Bu başlık şöyle çıktı; Hasan Yalçın’ın “Modern Web Tasarımı” kitabı için HTML5 ve CSS3 yeniliklerini bir cümle ile anlatmak istersen ne dersin demesi ile başladı. “Geliştirilen kodlama teknolojilerinde, css3 tasarımcıdan, html5 programcıdan rol çalıyor!” diye bir cümle kurmuştum. Bu cümlenin CSS3 kısmı eksik kaldığını zamanla gördüm. CSS3 sadece tasarımcıdan değil Javascript’ten de rol çalışıyor bunu gördüm.

Katman Mimarisi ve Js’in Yeri

  • İçerik Katmanı (HTML)
  • Gösterim Katmanı (CSS)
  • Davranış Katmanı (Javascript)

CSS3 ve HTML5’den önce bir kitapta şöyle bir şema görmüştüm.

Content katmanı Web sayfamızın içeriğini belirler. Web sayfamızda kullandığımız tüm yazılar, resimler, linkler, formlar vs. content kapsamında ele alınır. Content’i belirlemek için HTML kullanılır. Yani Web sayfamızdaki içeriği HTML ile belirtiyoruz. Bu içeriği kullanıcıya sunmak için presentation katmanı kullanılır. Bu katman ile Web sayfasında bulunan içeriği görsel olarak şekillendirip kullanıcıya sunarız. Bu sunumu gerçekleştirmek için CSS kullanılır ve son olarak behavior katmanı ise Web sayfamızın davranışını belirler. Sayfamızda bulunan olaylar, tetiklemeler, işlemler vs. davranış kapsamında ele alınır ve sayfanın davranışını belirlemek için JavaScript kullanılır.

küme

Küme Mimarisi

Genel anlamı ile yukarıdaki mantık doğru olsa da aslında hepsi bir birine bağımlı teknolojiler bunlar ve birbirinden rol çalabiliyorlar.

CSS3 ile birlikte değil aslında CSS2 versiyonunda da bir hareketlilik vardı. :hover Her ne kadar Murat Çorlu :hover’ın bir dinamizm getirdiğini kabul etmese de bence CSS’in sayfa düzeni işine girişmeden önceki en büyük dikkat çekiciliği linklerin :hover etkisine ulaşıp değiştirme imkanıdır.

Javascript’ten Rol Çalan Özellikler

  • :checked Sözde Sınıfı
  • :target Sözde Sınıfı
  • Kardeş Seçiciler (Bitişik ve Genel)
  • CSS3 Animasyon
  • CSS3 Transition
  • :hover Sözde Sınıfı
  • medya sorguları (media query)
  • calc() değeri

İkinci Liste

  • Seçiciler (first-child, last-child, nth-child)
  • CSS3 Transform
  • CSS3 Esnek Kutu Yerleşimi
  • ::selection seçicisi
  • pointer-events

Biz burada tıklama olanağı kazandıran :checked Sözde Sınıfı, :target Sözde Sınıfını ve Kardeş(Siblings) Seçicileri irdeleyeceğiz.

:checked Sözde Sınıfı

CSS ile bize tıklama yakalamayı sağlayan diğer bir özellik :checked sözde sınıfıdır. Normalde checkbox ve radio butonların işaretli olup olmaması durumu için çıkan bu özellik, tıklama yakalama özelliği yardımı ile bir çok uygulama yapımı için kullanılıyor.

radyo butonlar ve işaret kutuları label ile kullanılmaktadır.

<input id="rad1" type="radio" name="rad">
<label for="rad1">Radio 1</label>

for tanımı yardımı ile label ile radyo buton veya işaret kutusuna erişim sağlanır. for ile radyo buton ve işaret kutusu id’si aynı olmalıdır.

input[type="radio"]:checked+label{
	font-weight: bold;
}

Tanımı ile tıklama yakalama işini yapabiliyoruz.

Hemen bunu basit bir gizle göster işini nasıl yaparız onu gösterelim.

<input id="che1" type="checkbox" name="che">
<label for="che1">Radio 1</label>
<div class="icerikAlani">Gizli İçerik</div>

Yukarıdaki koda birde div ekledik. Amacımız bir tıkla bu divi göstermek, eğer açıksa bir tıkla gizlemek.

]
input[type="checkbox"],
.icerikAlani{
	display:none;
}

label{
	color:blue;
	cursor:pointer;
}

input[type="checkbox"]:checked ~ .icerikAlani{
	display:block;
}

Sadece bu kod yardımı ile gizle göster işini yapabiliyoruz. tilda(~) işareti Genel Kardeş Seçicisi yardımı ile aynı seviyede olan “icerikAlani” sınıfını buluyor ve gösteriyoruz.

target seçicisi

target seçicisi ve CSS’in tıklamaları yakalayabilme yeteneği kazanması. CSS ile tanım yapmak için seçicileri kullanıyoruz. Aslında benzer mantığı jquery ile javascript mecrasına da taşımış durumda. CSS3 öncesinde biz elemanların tıklanmasını CSS ile yakalayamıyorduk. ta ki :target seçicisi gelen kadar. :taget seçicisi bize elemanlara tıklandığını yakalama imkanı sağladı ve artık js ile tıklama yakalamayı beklememize gerek kalmadı.

<dl>
	<dt id="dn1">
		<a href="#dn1">Deneme Başlık</a>
	</dt>
	<dd>Deneme 1 İçerik</dd>
	<dt id="dn2">
		<a href="#dn2">Deneme Başlık 2</a>
	</dt>
	<dd>Deneme 2 İçerik</dd>
</dl>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

CSS kodu;

dt{
	font-weight:bold;
}

dt:target + dd{
	display:block;
}

dd{
	display:none;
}

:target sözde sınıfının dezavantajı sayfa imlecini ilgili içeriğe kaydırması ve adres barda #tanim ile geçiş sağlanmasıdır. Geri tuşları biraz devre dışı kalıyor.

Kardeş(Siblings) Seçiciler

CSS’in bir diğer sorunu sadece kapsayıcı eleman içindeki elemanlara erişebilmesi.

<p>Deneme metni <span>bir</span></p>
<div class="icerik">Burada içerik olsun</div>

CSS ile sadece bir kapsayıcı eleman içine müdahale edebilirken

p span{
	/* tanımlar */
}

Kardeş seçiciler yardımı ile artık kapsayıcı içinde olmayan elemanlara da erişebiliyoruz.

p + div.icerik{
	display:block;
}

veya

p ~ div.icerik{
	display:block;
}

gibi tanımlar ile DOM’deki aynı seviyedeki elemana erişim sağlayabiliyoruz.

  • Bitişik Kardeş Seçicileri (Bir ufak kardeş)
  • Genel Kardeş Seçicisi

Bitişik Kardeş Seçicileri

Bitişik Kardeş Seçicileri biribiri ardına gelen aynı seviyedeki elementlerden sonra gelenine stil tanımlamak için kullanılır. Tam olarak “Bir Ufak Kardeş Seçicisi” olmalıdır.

Bir örnek verelim bir başlığımız var ve sonrasında ard arda paragraflar geliyor. Biz başlık ile hemen ardından gelen paragrafın arasına mesafe koymak için bu seçiciyi kullanabiliriz.

<body>
	<h2>Başlık 2</h2>
	<p>Buraya <em>önemli</em> ve <strong>iyi</strong>kod gir</p>
	<p>Buraya <em>önemli</em> ve <strong>iyi</strong>kod gir</p>
</body>

Dökümanın yapısı:

Biz burada h2 ve h3 arasında boşluk vermek için aşağıdaki kodu kullanırız:

h2 + p {
	margin-top: 10px;
}

Bu seçiciyi ie7’nin seçicisini destekliyor.

Sonuç olarak konunun başında söylediğimiz gibi CSS, (X)HTML elementlerinin kendi aralarındaki ilişkileri kullanarak bize bir çok avantaj sağlar. Bu sayede bir çok kod yığınından kurtulmuş oluruz ve kodlarımız bir düzene girer. Bu kuralları uyguladıkça önemini daha iyi anlayacağız.

Çocuk Seçicileri ve Bitişik Kardeş Seçicileri‘ni Internet Explorer 7 versiyonundan itibaren desteklemeye başlamıştır. Bu nedenle kullanımı konusunda dikkat etmeliyiz.

Genel Kardeş Seçicisi

CSS2.1 ile birlikte gelen bitiş kardeş seçicilerine benzer bir seçicidir. Bitişik kardeş seçicisine göre daha seçici ve kullanışlı bir seçicidir. Aynı kapsayıcıya sahip elemanların belirtilen elemandan sonraki aynı seviyedeki elemanların tümünü yakalamak için kullanılır. Burada dikkat edilmesi gereken konu belirtilen elemandan sonraki aynı seviyedeki elemanları seçiyor olması. Tanımlama yaparken araya işaret olarak tilde(~) koyuyoru

Bir örnek yapacak olursak bir resmimiz var bunu sola hizalayacağız ve sağdanda metinler akacak. Bu resim ve paragraflar arasına padding tanımlamak için genel kardeş seçicisi birebirdir.

img{
	float:left;
}

img ~ p{
	padding-left:110px;
}

html kodu

<img src="kedi.jpg" width="96" height="96" alt="kedi" />
<p>Kedi (Felis catus),...</p>
<p>2,5 ile 12 kilo ...</p>
<p>Kediler hoş görünüşlü, ..</p>

Bu seçiciyi ie7’nin seçicisini destekliyor.

CSS3 Yarıdımı İle Js’den Çalınan Roller

  • Akordiyon Uygulaması
  • Sekme Uygulaması
  • Slider Uygulamaları
  • Lightbox, modal Uygulamaları
  • Animasyon ve efektler
  • Tooltip
  • Menü Uygulamaları
  • Özel Form Elemanları
  • Diğer Uygulamalar

Akordiyon Uygulaması

Akordiyon uygulamaları web sayfalarında biraz yerden kazanmak birazda görsellik kazandırmak için tercih edilen yapılardır. Mevcutta ve daha önceleri javascript daha doğrusu jquery ile yapılan bu uygulamaları artık CSS yardımı ile yapabiliyoruz.

CSS ile yapılan akordiyon menülerde kardeş seçicileri ve :checked Sözde sınıfı/:target Sözde Seçicisi yardımı ile oluşturuluyor. Gizlenmiş input alanına tıklandığında kardeş seçicisi le ile ulaşılan içerik göster-gizle yapılıyor. Araya animasyon koyarak daha görsel sonuçlar elde edilebiliyor.

Bu işi benzer bir mantık ile :target seçicisi yardımı ile yapabiliyoruz.

Sekme Uygulaması

Yine yer sıkıntısı nedeni ile oluşturulmuş çözümlerden birisi de sekmeli yapılardır.

CSS ile oluşturulurken yine kardeş seçicileri ve :checked Sözde sınıfı/:target Sözde Seçicisi yardımı ile oluşturuluyor.

CSS3 sekmeli yapıları gizli radyo butonuun :checked Sözde sınıfı yardımı ile tıklama özelliği kazandırılmış alana tıklayınca belirli alanların gözterilmesi mantığı ile yapılmaktadır.

Slider

Şu aralar çok fazla tercih edilen slider uygulamalarını sadece CSS ile yapabilmek çok süper.

Çalışma mantığı, javascript ile yaptığımız mantık ile aynıdır. float ile yan yana sıralanmış içerik overflow:hidden ile sadece seçilen resmi gösteriyoruz. Her tıklamada margin-left değeri içerik kadar sola doğru çekecek bir değer verilerek yapılır.

Bir çok şekilde uygulaması olan silder’ın farklı çeşitlerini görmek için codrops sitesine uğramanızı öneriyorum. Makalede linkleri mevcut.

Site içinde kullanılan resimlerin daha büyüğünü görmek için kullanılan yapılardır. Sadece resimler değil içerik içinde geçerli. Bir nevi popup’ın yerini aldı lightbox.

Mantık olarak küçük bir resme tıklayınca büyük resmi göstereceğiz. :target sözde sınıfı yardımı ile ilgili büyük resmi yakalayıp göstererek yapılıyor.

Ayrıca animasyon ve transition yardımı ile görsel olarak güzel geçişler yapabiliyoruz.

Animasyon, Efektler vd.

Daha çok flash ile yapılan animasyon ve efektler, aynı zamanda javascript ile de bir çok animasyon ve efekt yapabiliyoruz.

CSS3 yardımı ile artık CSS ile de yapabiliyoruz.

Bu konuda CSS3 Animasyon ve CSS3 Transition özellikleri kullanılmaktadır.

Şu an için flashdaki efekt ve animasyonların hepsi yapılamasa da güzel bir çok örnek yapılabilmekte.

Animasyona alışık olmayan CSS kod yazarlarını zorlayacak uygulamalar. Ancak uğraşması zevkli.

Tooltip

CSS2 ile de yapabildiğimiz tooltip uygulamaları CSS3 ile daha görsel ve efektli görünüm kazandırabiliyoruz.

:before ve :after Sözde elementleri ve CSS3 Animasyon/ CSS3 Transition yardımı ile bir çok güzel tooltip yapabiliyoruz.

Menü

Bir çok menü uygulaması uzun süredir javascript’ten bağımsız olarak sadece CSS ile yapılmakta.

CSS3’ün yeni özellikleri görsellik ve efektli ve resimsiz çözümler üretmemizi sağlıyor.

@font-face özelliği ve CSS3 renk geçişi yardımı ile resimsiz güzel menüler elde edebiliyoruz.

Özel Form Elemanları

İşletim sisteminin standart form elemanlarından sıkılmış bir çok kullanıcı gibi tasarımcılarda özel form elemanları tasarlamaktadır. Arayüz geliştiricileri zorlayan bu konuda yardımımıza javascript yetişiyordu.

Artık CSS3 :checked Sözde sınıfı yardımı ile güzel radyo butonları ve işaret kutuları oluşturabiliyoruz.

Diğer Uygulamalar

Bunun dışında yine kardeş seçicileri, :checked, :target sözde seçileri, CSS3 Animasyon, CS3 Transtion özelliklerini kullanarak bir çok farklı uygulama yapılmaktadır. Benim gördüğüm

Kaynaklar

CSS ile büyük kardeşe söz geçirme

Başlığa bakınca sanki bir aile olayına dair bir yazı geçecek anlamı çıkarmayın. HTML'deki elemanların birbiriyle olan ilişkilerini anlatm...… Devamını oku

Javascript ile medya kontrolü

17 February 2017 tarihinde yayınlandı.

Yenilenen Google Çeviri hizmeti

31 January 2017 tarihinde yayınlandı.