Birkaç faydalı CSS kodlama ipucu

Birkaç faydalı CSS kodlama ipucu

İnsan, uzun süre aynı şeyleri yaptığı zaman bir düzen ve standart tutturup hem süreden hem de gereksiz yere fosfor harcamaktan kurtuluyor. Bu durum, zaman ve fosfor tasarrufunun yanında yazılan kodun kullanılabilir, okunabilir, uzun ömürlü ve evrensel standartlarda olması gibi birçok avantajı da beraberinde getiriyor. Aşağıda özellikle CSS ve HTML kodlaması ile uğraşanların işini kolaylaştırmak adına kaale almaya değer birkaç madde bulacaksınız.

reset.css kullanın

Tarayıcıların yerleşik stilleri farklı yorumlamalarından kaynaklanacak sorunları minimize etmek için bir reset.css kullanmak her zaman faydalıdır. Aşağıda kullanabileceğiniz birkaç popüler reset.css örneği mevcut.

https://meyerweb.com/eric/tools/css/reset/
https://clarle.github.io/yui3/yui/docs/cssreset/
http://necolas.github.io/normalize.css/
http://html5doctor.com/html-5-reset-stylesheet/

Ben, Eric Meyer tarafından hazırlanan reset.css v2.0 kullanıyorum.

Kısa CSS tanımlamaları kullanın

Mecbur kalmadıkça uzun tanımlamalar yapmak yerine kodlarınızı mümkün olduğunca kısaltın. Zira kısa tanımlamalar kullanmak, gerek temiz kod yazımı gerekse anlaşılabilirlik açısından hem size, hem de haleflerinize (sizden sonra geleceklere) avantaj sağlayacaktır. Kısa CSS tanımlamalarının avantajını, ileride yazdığınız kodlarda güncelleme ve düzenleme yapmak zorunda kaldığınızda kendinizi kalabalıklaşmış kodlarla boğuşmak yerine bir bakışta şıp diye anlaşılabilen kodların içinde bulduğunuzda anlayacaksınız. Performans için dosya boyutundan edeceğiniz avantajı saymıyorum bile.

.post-title {
    font-family: Arial, Tahoma, Verdana;
    font-size: 15px;
    font-style: italic;
    font-weight: bold;
    line-height: 30px;
}

yerine

.post-title {
    font: italic bold 15px/30px Arial, Tahoma, Verdana;
}

kullanım şeklini tercih edebilirsiniz.

Yine benzer şekilde özellikle margin ve padding gibi birden çok ve farklı değer verilebilen tanımlamaları yaparken tekrar eden değerleri kullanmaktan kaçının.

.container {
    margin: 10px 10px 10px 10px;
}

kullanımı yerine

.container {
    margin: 10px;
}

kullanımı,

.container {
    margin: 20px 10px 20px 10px;
}

kullanımı yerine de

.container {
    margin: 20px 10px;
}

kullanımı aynı sonucu verecektir.

CSS bloklarını birbirlerinden ayırın

Her bir bölge için tanımladığınız CSS kodlarını tek bir blok olarak bir arada tutun ve bu bölümleri anlaşılır yorum başlıkları ile diğer bölgelerin kodlarından ayırın. Böylece bir bölümde yapacağınız bir değişiklik için nerede düzenleme yapmanız gerektiğini rahatlıkla bulabilirsiniz.

/**
 * Header
 */
.header {
    line-height: 24px;
    margin-bottom: 20px;
    padding: 10px;
}

.site-title,
.site-description {
    font-family: Helvetica, Geneva, Arial, sans-serif;
    font-size: 24px;
}

/**
 * Navigation
 */
.navigation {
    margin-bottom: 10px;
}

.navigation ul {
    list-style-type: circle;
}

.navigation li {
    float: left;
    margin-right: 10px;
}

.navigation li a {
    color: #d00;
}

/**
 * Footer
 */
.footer {
    background: #eee;
}

.footer a {
    color: #333;
    font-size: 11px;
    text-decoration: underline;
}

Özellikleri bir arada toplamak için classları dağınık kullanmayın

Ortak özellikler atanması gereken elemanları ve class tanımlamalarını bir arada toplamak ile aynı özelliği birden çok eleman / class için tanımlamak arasında kalabilirsiniz. Bu durumda benim tercihim aynı özelliği birden çok eleman / class için tanımlamak oluyor. Her ne kadar diğer seçeneğin de avantajları olsa da sürdürülebilir bir kodlama yapısı için ikincisi çok daha makul ve mantıklı görünüyor.

Yani bahsettiğim;

.header,
.footer {
    line-height: 24px;
    padding: 10px;
}

.header {
    background: #333;
    color: #fff;
}

.footer {
    background: #eee;
    color: #222;
}

şeklinde bir kullanımdan ziyade

.header {
    background: #333;
    color: #fff;
    line-height: 24px;
    padding: 10px;
}

.footer {
    background: #eee;
    color: #222;
    line-height: 24px;
    padding: 10px;
}

şeklinde kullanmaktır.

Bu kullanım başlangıç için veya birkaç satırlık kod bloğu için yanlış bir kullanım şekli olarak görülse de çok fazla sayıda class ve id ile çalıştıkça hiç de yanlış olmadığı anlaşılacaktır. Aksi durumda, ileride çoklu tanım yaptığınız elemanlardan sadece bir tanesi için tanımladığınız özelliği değiştirmek istediğinizde; bu değişikliğin başka elemanları da etkileyip etkilemediğini sorgulamanız, etkilemişse etkilenenler için de ekstra tanımlamalar yapıp eski haline getirmeniz gerekecektir. Ki bu kadarıyla uğraşmak da pek doğru bir yaklaşım gibi görünmüyor.

Elemanların asli özelliklerini koruyun

Elemanlara standart kullanım özellikleri harici ekstra özellikler tanımlamayın. Örnek: strong için altı çizili bir tanımlama yapmak doğru değildir. İlla bu tür elemanlara özellik atamanız gerekiyorsa o eleman için bir class tanımlayıp o class için özellik belirleyebilirsiniz.

strong {
    text-decoration: underline;
}

yerine

strong.comment-author {
    text-decoration: underline;
}

şeklinde kullanırsanız daha sonra başka bir yerde strong uyguladığınız bir başlığın altının neden çizili olduğunu aramak zorunda kalmazsınız.

Anlaşılır ve mantıklı class – id isimleri kullanın

Her ne kadar her eleman için makul ve mantıklı class ve id ismi bulmak bir süre sonra zorlayıcı bir durum olsa da makul ve mantıklı isimler kullanmak her zaman yararlıdır. Birkaç harften oluşan kısaltmalar dosya boyutundan kazanmak için yararlı gibi görünse de stil dosyanızın içeriği yüzlerce hatta binlerce satırı geçtiğinde ve birbirine benzer bir sürü tanım olduğunda içinden çıkılmaz bir karmaşaya sürüklendiğinizi anlarsınız fakat iş işten geçmiş olur.

Aşağıdaki iki CSS bloğundan hangisinin daha okunabilir olduğunu söyleyip kıyaslama yapmanın gerekli olmadığını düşünüyorum.

.cnt {
    margin: 10px;
    padding: 5px;
}

.pt {
    font-size: 18px;
    font-weight: bold;
}
.content {
    margin: 10px;
    padding: 5px;
}

.post-title {
    font-size: 18px;
    font-weight: bold;
}

Sıfırlara değer vermeyin

Sıfır zaten sıfırdır ve px veya em ile bir değer tanımı yapmanız hiçbir şeyi değiştirmeyecektir. O nedenle 0px veya 0em şeklinde kullanım yapmaktan kaçının.
Yanlış kullanım şekli:

.comment {
    margin: 0px 10px 0px 5px;
}

Doğru kullanım şekli:

.comment {
    margin: 0 10px 0 5px;
}

Zorunlu üst elemanları genel tanımlamalara eklemeyin

Zaten bir üst elemana bağlı olmak zorunda olan elemanlar için CSS tanımlaması yaparken üst elemanını da kullanmayın.

ul li {
    float: left;
}

tanımlamasında ul kullanımının,

table td {
    padding: 5px;
}

tanımlamasında da table kullanımının hiçbir anlamı yoktur.

Çünkü bir listede li kullanabilmek için bir üst elemanı olan ul, bir tabloda td kullanabilmek için de yine bir üst elemanı olan table kullanmak zorundasınız. Ve sizin yapacağınız stil tanımı, siz üst eleman kullansanız da kullanmasanız da geçerli olacaktır.

CSS tanımlamalarında üst eleman ancak bir belirteçle (class veya id) kullanıldığında bir anlam kazanır. Şöyle ki;

ul.cat-list li {
    font-weight: bold;
}

Bu tanımlama ile sadece cat-list classı atanmış liste elemanlarının yazıları kalın olacak, bu tanım diğer liste elemanlarını etkilemeyecektir.

Ve diğerleri

Kendiniz için en kolay ve en kullanışlısının hangisi olacağına inanıyorsanız onu seçip standart bir isimlendirme sistemi kullanın.

– Tümü küçük harfle isimlendirme yapabilirsiniz:

.author-name {
    font-size: 18px;
}

– Sadece kelimelerin ilk harfleri büyük, diğerleri küçük şeklinde isimlendirme yapabilirsiniz:

.Author-Name {
    font-size: 18px;
}

Bir standardınızın olması için sabit bir ayraç belirleyip tüm isimlendirmeleri aynı ayraçla yapın.

– Ayraç olarak tire (-) kullanabilirsiniz:

.author-name {
    font-size: 18px;
}

– Ayraç olarak alt çizgi (_) kullanabilirsiniz:

.author_name {
    font-size: 18px;
}

Ben, class ve id isimlendirmelerini tümü küçük harfle ve kelimeleri tire ile ayırarak yapmayı tercih ediyorum.

Az lafla çok şey anlatmak her babayiğidin harcı değil, hele ki benim hiç değil! O nedenle yazı epey uzun olmasına rağmen hala değinilmesi gerektiği halde değinemediğim birçok madde var. Neyse ki bu maddelerin neredeyse tamamı az buçuk İngilizce bilgisi olanların anlayabileceği halde birileri tarafından yazılmış. Aşağıya gerek bu yazıyı yazarken faydalandığım gerekse yazıda bahsedemediğim ipuçlarını barındıran birkaç makaleye bağlantı ekliyorum.

W3 doğrulaması, sık karşılaşılan hatalar ve çözümleri 1

Epey zamandır gerek iş yoğunluğundan, gerekse tembellikten dolayı fazla vakit almayan girişler haricinde yazı yazmadığımı ve faaliyette bulunmadığımı fark ettim. Yatarak geçireceğim Pazar günümün bir bölümünü değerlendirerek taslak olarak kaydettiğim ve vakit bulduğumda yazacağım konulardan birine değineyim dedim. Bu yazıda, çoğu web tasarımcısı ve kodlayıcısının hayali olan W3 standartlarına uygun kod yazabilmek için dikkat edilmesi gereken noktalara ve sıklıkla yapılan W3 hataları ile bu hataların ne şekilde çözülebileceğine değinmek istiyorum.

Bu yazıda değineceğim noktaların temel düzeyde HTML – CSS bilgisi gerektirdiğini belirtmekte yarar var.

Şimdi geçelim sıklıkla yapılan W3 doğrulamasından sınıfta kalmaya neden olan hatalara ve çözüm yollarına:

1. Dosya kodlaması ve karakter seti uyuşmazlığı
W3 doğrulamasından geçen HTML kodlaması yapabilmek için öncelikli olarak oluşturulacak kodların ve dosyaların bazı kriterlere uygun olması gerekiyor. Bunların başında da doğru karakter kodlaması kullanmak gelmektedir. Yani HTML dosyamızı (PHP, ASP vs. de olabilir) kod tanımlamasında belirttiğimiz karakter setine uygun kodlama ile kaydetmeliyiz. Kod tanımlamasını utf-8 olarak belirttiğimiz bir dosyayı ANSI dosya kodlaması ile kaydedersek henüz W3 doğrulamasına girmeden hata alırız. Bu nedenle karakter setini

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

olarak atadığımız bir HTML dosyasını kaydederken dosya kodlamasını da utf-8 olarak seçmemiz gerekmektedir.

Dosya karakter kodlaması

2. DOCTYPE kullanmamak veya yanlış DOCTYPE seçimi yapmak
Sıkça internette gezinen biri olarak bir hobim de gezdiğim sitelerin kodlama yapılarını incelemektir. Bazen öyle durumlarla karşılaşıyorum ki şaşırmamak elde değil. Öyle ki koca koca ajanslar bile yaptıkları kodlamalarda DOCTYPE kullanmaya gerek dahi görmüyor, kodladıkları sitelerin standartlara uyumluluğunu önemsemiyorlar. Genelde kamu sitelerinde sıklıkla karşılaşılan bu durumun profesyoneller tarafından da yapılıyor olması üzüntü verici bir durum olsa gerek.

DOCTYPE, bir sayfanın tarayıcılar tarafından hangi kural ve kriterlere göre görüntüleneceğini tanımlamaya yarar. Eğer DOCTYPE, hiç kullanılmazsa veya yanlış kullanılırsa farklı tarayıcıların o sayfa için farklı şekillerde davranmasına ve farklı görünümler ortaya çıkmasına neden olur. Aynı zamanda da W3 doğrulama hatasına sebep olur. Bu nedenle W3 uyumlu bir kodlama için mutlaka DOCTYPE kullanmak ve DOCTYPE seçimini de doğru bir şekilde yapmak gerekir. DOCTYPE kullanımı ve doğru DOCTYPE seçimi oldukça geniş bir kavram olduğu için şimdilik daha fazlasına girmek istemiyorum. Sadece günümüzde en çok kullanılan ve son trendlerin en uygun ve kolay şekilde uygulanabilmesi için gereken DOCTYPE’in XHTML 1.0 Transitional olduğunu belirtmekle yetineceğim. Kullanımı da aşağıdaki şekildedir.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Bu noktadan itibaren listemizdeki maddelerin, DOCTYPE olarak XHTML 1.0 Transitional seçildiğini varsayarak ele alacağımı dikkate almanızda yarar var.

3. Meta etiketlerinin ve HTML elemanlarının kapatılmaması
XHTML kodlama standartlarına göre birkaç istisnai durum haricinde açılan her HTML elemanının kapatılması zorunluluğu var. Hal böyleyken gerek eskiden kalma alışkanlıklarla, gerekse hazır olarak temin edilen kodlarla bu işlem ihmal edilebiliyor ve bunun sonucunda da birçok W3 doğrulama hatası ortaya çıkıyor. Kapatılması ihmal edilen kodların başında da meta etiketleri, satır atlatma (<br />), yatay çizgi (<hr />) ve resim (<img src=”resim.jpg” />) kodları gelmektedir.

4. Stil ve JavaScript kodlarına tip tanımlaması atamamak
Sıklıkla karşılaştığımız bir başka kodlama hatası da kodlama içinde kullanılan veya kodlamaya dâhil edilen stil ve JavaScript kodlarının veya dosyalarının tip tanımlamalarının yapılmamasıdır. Bu hatadan kurtulmak için kodlamamızda kullanacağımız stil ve JavaScript kodlarına mutlaka tip tanımlaması yapmak gerekmektedir.

Yanlış kullanım:

<style>a { color: #00f; }</style>
<script src="jquery.js"></script>

Doğru kullanım:

<style type="text/css">a { color: #00f; }</style>
<script type="text/javascript" src="jquery.js"></script>

5. Eksik & (ampersand) işareti kullanımı
Bağlantı parametrelerinde ayraç olarak kullanılan & (ampersand) işaretinin yanlış, daha doğrusu eksik olarak kullanılması da standartlara uygunsuzluk sorunu meydana getirir. Sıklıkla bağlantılarda karşımıza çıkan bu işaretin W3 doğrulama hatasına neden olmaması için sayfa kodlamasında kullanımı esnasında açılımı ile birlikte yazılması gerekiyor. Eğer elimizde ara.php?q=html&s=2 şeklinde bir bağlantı varsa ve bunu HTML kodlamamızda kullanacaksak & işaretini sonuna amp; de getirerek kullanmamız doğru olacaktır…

Yanlış kullanım:

<a href="ara.php?q=html&s=2">html</a>

Doğru kullanım:

<a href="ara.php?q=html&amp;s=2">html</a>

6. Birden fazla ID tanımlaması kullanmak
Bilindiği gibi CSS, kodlama tekniklerine gireli beri birçok şey değişti. Bu değişikliklerin başında da HTML sayfalarının saf stil kodlarından arî olarak kodlandıktan sonra hazırlanacak stil dosyaları ile biçimlendirilmeleri gelmektedir. Bu durum, kod karmaşasının önüne geçtiği gibi uzun vadede yapılacak değişiklik ve düzenlemelerin de tek bir stil dosyası içerisinde rahatlıkla yapılmasına olanak sağlıyor.

HTML elemanlarının stil dosyası ile biçimlendirilebilmeleri için her elemana stil tanımlamasının yapılması gereklidir. HTML elemanlarına stil tanımlaması yapmanın iki yolu vardır; class ve id kullanmak. Aslında ID tanımının icat ediliş amacı stil tanımlamasından ziyade

Asıl kullanım amacı biçimlendirmeden ziyade işaretleme olan ID’ler, zamanla stil biçimlendirme elemanı olarak da kullanılmaya başlandı. Fakat birden çok HTML elemanının aynı ID ile işaretlenmesi, ID kullanımının amacına ters olduğundan W3 standartlarına uymaz ve hata verir. Bu nedenle sayfa içinde birden çok kullanılması düşünülen stil tanımlamalarının ID şeklinde değil de class şeklinde tanımlanmasında yarar var.

Yanlış kullanım:

<div id="kutu">1. Kutu içeriği</div>
<div id="kutu">2. Kutu içeriği</div>

Doğru kullanım:

<div class="kutu">1. Kutu içeriği</div>
<div class="kutu">2. Kutu içeriği</div>

Sıklıkla karşılaşılan W3 hatalarının oldukça çeşitli olması tümünü bir yazıda anlatmaya olanak vermiyor. O nedenle bu konuyu bir yazı dizisi şeklinde yazmanın daha uygun olduğunu düşünüyor ve ilk yazıyı burada bitiriyorum. Serinin ikinci yazısında görüşmek üzere, hatasız kodlamalar…

Reklamcılardan e-posta adreslerini korumak

Sunduğu imkanlar ile sayısız faydası olan internetin bir o kadar da zararlarının olduğu muhakkak. Bu zararların en başında da e-posta adreslerinizin izniniz dışında toplanarak reklam ve tanıtım postalarına alet edilmesi ve bu şekilde zamanınızın çalınması gelmekte.

İnternette e-posta adresinizi yayınlama zorunluluğumuzun olduğu durumlarda küçük bir CSS hilesi ile reklamcılardan e-posta adresimizi koruyabiliriz. Yapmamız gereken ufak bir CSS hilesine başvurmak ve e-posta adresimizi tersinden yazarak işin geri kalan kısmını CSS’e bırakmak.

CSS Kodu:

.eposta { unicode-bidi:bidi-override; direction: rtl; }

Bu kod ile eposta işaretini atadığımız elemanın çift yönlü olarak gösterilebileceğini, yönünün de rtl (right to left) ile sağdan sola olduğunu belirtiyoruz. Geriye ise bir elemente eposta işaretlemesini atamak ve e-posta adresimizi tersinden yazmak kalıyor.
HTML Kodu:

<span class="eposta">ten.nacret@ofni</span>

Uygulama için çalışan bir örnek görmek isterseniz şuraya bakabilirsiniz.