{"id":44820,"date":"2026-09-21T21:06:34","date_gmt":"2026-09-21T18:06:34","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/"},"modified":"2026-09-21T21:06:59","modified_gmt":"2026-09-21T18:06:59","slug":"web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/","title":{"rendered":"Web Bile\u015fenleri D\u00fcnyas\u0131nda Yeni Bir Soluk: CSS-Only Custom Elements Nedir?"},"content":{"rendered":"<h2>Web Bile\u015fenleri D\u00fcnyas\u0131nda Yeni Bir Soluk: CSS-Only Custom Elements Nedir?<\/h2>\n<p>Modern web geli\u015ftirme d\u00fcnyas\u0131nda, yeniden kullan\u0131labilir ve kaps\u00fcllenmi\u015f kullan\u0131c\u0131 aray\u00fcz\u00fc (UI) bile\u015fenleri olu\u015fturmak, uygulamalar\u0131n h\u0131zla geli\u015ftirilmesi ve s\u00fcrd\u00fcr\u00fclebilirli\u011fi a\u00e7\u0131s\u0131ndan hayati \u00f6nem ta\u015f\u0131r. Geleneksel olarak, bu t\u00fcr &#8220;\u00f6zel elementler&#8221; olu\u015fturmak i\u00e7in React, Vue, Angular gibi JavaScript framework&#8217;lerine veya Web Components API&#8217;sine ba\u015fvurulur. Ancak, her senaryo i\u00e7in tam te\u015fekk\u00fcll\u00fc bir JavaScript \u00e7\u00f6z\u00fcm\u00fc gerekli midir? Ya da daha hafif, daha performansl\u0131 ve daha basit bir yol var m\u0131d\u0131r? \u0130\u015fte tam bu noktada CSS-Only Custom Elements kavram\u0131 devreye giriyor. Bu makalede, JavaScript&#8217;e ba\u011f\u0131ml\u0131 kalmadan, yaln\u0131zca HTML ve CSS&#8217;in g\u00fcc\u00fcyle nas\u0131l \u00f6zel bile\u015fenler olu\u015fturabilece\u011fimizi, bu yakla\u015f\u0131m\u0131n avantajlar\u0131n\u0131, temel prensiplerini ve ger\u00e7ek d\u00fcnya uygulamalar\u0131n\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz. Amac\u0131m\u0131z, hem yeni ba\u015flayanlar\u0131n konuya hakim olmas\u0131n\u0131 sa\u011flamak hem de deneyimli geli\u015ftiricilere ilham verecek ileri d\u00fczey teknikler sunmakt\u0131r.<\/p>\n<p>CSS-Only Custom Elements, ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, JavaScript kullanmadan, sadece CSS ve HTML&#8217;in yerel yetenekleriyle tasarlanm\u0131\u015f, kendi i\u00e7inde kaps\u00fcllenmi\u015f ve yeniden kullan\u0131labilir UI par\u00e7ac\u0131klar\u0131d\u0131r. Bunlar, ger\u00e7ek bir Web Component (web bile\u015feni) de\u011fildirler \u00e7\u00fcnk\u00fc <code>customElements.define()<\/code> gibi JavaScript API&#8217;lerini kullanmazlar. Bunun yerine, HTML&#8217;in semantik yap\u0131s\u0131n\u0131, CSS&#8217;in g\u00fc\u00e7l\u00fc se\u00e7icilerini, pseudo-elementlerini, CSS de\u011fi\u015fkenlerini ve yeni nesil d\u00fczen \u00f6zelliklerini (Flexbox, Grid) ak\u0131ll\u0131ca birle\u015ftirerek, bir \u00f6zel bile\u015fen hissi yarat\u0131rlar. Bu yakla\u015f\u0131m, \u00f6zellikle basit etkile\u015fimlere sahip veya tamamen g\u00f6rsel tabanl\u0131 bile\u015fenler i\u00e7in idealdir. \u00d6rne\u011fin, bir kart bile\u015feni, bir uyar\u0131 mesaj\u0131, basit bir sekme men\u00fcs\u00fc veya bir d\u00fc\u011fme grubu gibi \u00f6\u011feler, bu y\u00f6ntemle \u015fa\u015f\u0131rt\u0131c\u0131 derecede g\u00fc\u00e7l\u00fc ve esnek bir \u015fekilde olu\u015fturulabilir. Bu teknik, web sitenizin y\u00fckleme s\u00fcresini k\u0131saltabilir, JavaScript ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n\u0131 azaltabilir ve projelerinizin bak\u0131m\u0131n\u0131 kolayla\u015ft\u0131rabilir. Peki, bu &#8220;yaln\u0131zca CSS&#8221; felsefesiyle neler ba\u015farabiliriz ve bu bize ne gibi kap\u0131lar a\u00e7ar?<\/p>\n<h2>Neden CSS-Only Yakla\u015f\u0131m\u0131 Tercih Edilmeli? Avantajlar\u0131 ve Kullan\u0131m Senaryolar\u0131 Nelerdir?<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz web geli\u015ftirme d\u00fcnyas\u0131nda h\u0131z ve performans, kullan\u0131c\u0131 deneyiminin temel ta\u015flar\u0131d\u0131r. Her eklenen JavaScript kodu, sayfan\u0131n y\u00fcklenme s\u00fcresini art\u0131rabilir, taray\u0131c\u0131da daha fazla i\u015flem g\u00fcc\u00fc t\u00fcketebilir ve dolay\u0131s\u0131yla kullan\u0131c\u0131ya daha yava\u015f bir deneyim sunabilir. CSS-Only Custom Elements yakla\u015f\u0131m\u0131, bu noktada \u00f6nemli avantajlar sunarak, geli\u015ftiricilere daha hafif, daha h\u0131zl\u0131 ve daha s\u00fcrd\u00fcr\u00fclebilir \u00e7\u00f6z\u00fcmler \u00fcretme imkan\u0131 tan\u0131r. Bu yakla\u015f\u0131m\u0131n sundu\u011fu ba\u015fl\u0131ca faydalar\u0131 ve hangi senaryolarda tercih edilmesi gerekti\u011fini derinlemesine inceleyelim.<\/p>\n<h3>Performans ve Y\u00fckleme H\u0131z\u0131<\/h3>\n<p>En belirgin avantajlardan biri, \u015f\u00fcphesiz performanst\u0131r. JavaScript dosyalar\u0131n\u0131n indirilmesi, ayr\u0131\u015ft\u0131r\u0131lmas\u0131 ve y\u00fcr\u00fct\u00fclmesi, \u00f6zellikle mobil cihazlarda veya yava\u015f internet ba\u011flant\u0131lar\u0131nda \u00f6nemli gecikmelere neden olabilir. CSS-Only bile\u015fenler, neredeyse hi\u00e7 JavaScript gerektirmedi\u011fi i\u00e7in bu ek y\u00fckten tamamen kurtulur. Taray\u0131c\u0131, sadece HTML yap\u0131s\u0131n\u0131 ve CSS stil kurallar\u0131n\u0131 i\u015fler ki bu, \u00e7o\u011fu zaman JavaScript i\u015fleminden \u00e7ok daha h\u0131zl\u0131d\u0131r. Bu durum, \u00f6zellikle ilk sayfa y\u00fcklemesinde (First Contentful Paint, FCP) ve etkile\u015fime haz\u0131r olma s\u00fcresinde (Time to Interactive, TTI) g\u00f6zle g\u00f6r\u00fcl\u00fcr iyile\u015fmeler sa\u011flar. Daha h\u0131zl\u0131 y\u00fcklenen sayfalar, kullan\u0131c\u0131lar\u0131n sitenizde daha uzun s\u00fcre kalmas\u0131n\u0131 te\u015fvik eder ve arama motoru optimizasyonu (SEO) a\u00e7\u0131s\u0131ndan da pozitif bir etki yarat\u0131r.<\/p>\n<h3>Geli\u015ftirme Kolayl\u0131\u011f\u0131 ve H\u0131z<\/h3>\n<p>JavaScript framework&#8217;leri g\u00fc\u00e7l\u00fc ara\u00e7lar olsa da, \u00f6\u011frenme e\u011frileri ve yap\u0131land\u0131rma karma\u015f\u0131kl\u0131klar\u0131 olabilir. CSS-Only yakla\u015f\u0131m\u0131, temel HTML ve CSS bilgisi olan herkesin h\u0131zla \u00f6zel bile\u015fenler olu\u015fturabilmesini sa\u011flar. Karma\u015f\u0131k bir build s\u00fcreci (derleme s\u00fcreci) veya \u00f6zel bir tooling (ara\u00e7 tak\u0131m\u0131) gerektirmez. Bu, \u00f6zellikle k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli projelerde veya prototipleme a\u015famalar\u0131nda geli\u015ftirme s\u00fcrecini \u00f6nemli \u00f6l\u00e7\u00fcde h\u0131zland\u0131rabilir. Geli\u015ftiriciler, do\u011frudan taray\u0131c\u0131da \u00e7al\u0131\u015fabilen, anla\u015f\u0131lmas\u0131 ve \u00fczerinde de\u011fi\u015fiklik yap\u0131lmas\u0131 kolay kodlar yazabilirler.<\/p>\n<h3>Bak\u0131m Maliyetlerinin D\u00fc\u015f\u00fckl\u00fc\u011f\u00fc<\/h3>\n<p>Daha az JavaScript kodu, genellikle daha az hata ve daha kolay hata ay\u0131klama anlam\u0131na gelir. CSS kurallar\u0131, genellikle JavaScript mant\u0131\u011f\u0131ndan daha deterministiktir (belirleyicidir) ve \u00f6ng\u00f6r\u00fclebilirdir. Bir bile\u015fenin stilini de\u011fi\u015ftirmek veya k\u00fc\u00e7\u00fck bir d\u00fczenleme yapmak, yaln\u0131zca CSS dosyas\u0131nda ilgili kural\u0131 bulup d\u00fczenlemek kadar basittir. Bu, uzun vadede projenin bak\u0131m maliyetlerini d\u00fc\u015f\u00fcr\u00fcr ve yeni ekip \u00fcyelerinin projeye adaptasyonunu kolayla\u015ft\u0131r\u0131r. Ayr\u0131ca, framework ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 olmad\u0131\u011f\u0131 i\u00e7in, framework g\u00fcncellemeleri veya de\u011fi\u015fiklikleri nedeniyle bile\u015fenlerin yeniden yaz\u0131lmas\u0131 gibi durumlar ya\u015fanmaz.<\/p>\n<h3>Eri\u015filebilirlik (Accessibility) Faydalar\u0131<\/h3>\n<p>Do\u011fru bir \u015fekilde uyguland\u0131\u011f\u0131nda, CSS-Only Custom Elements, m\u00fckemmel eri\u015filebilirlik sa\u011flayabilir. Bunun temel nedeni, genellikle semantik (anlamsal) HTML yap\u0131s\u0131na dayanmalar\u0131d\u0131r. \u00d6rne\u011fin, bir sekme men\u00fcs\u00fc olu\u015ftururken, JavaScript ile dinamik olarak <code>div<\/code>&#8216;ler olu\u015fturmak yerine, <code>input type=\"radio\"<\/code> ve <code>label<\/code> elementlerini kullanmak, ekran okuyucular i\u00e7in do\u011fal bir navigasyon ve etkile\u015fim deneyimi sunar. Bu, web sitenizin daha geni\u015f bir kitle taraf\u0131ndan kullan\u0131labilir olmas\u0131n\u0131 sa\u011flar ve yasal eri\u015filebilirlik standartlar\u0131na uyumu kolayla\u015ft\u0131r\u0131r. JavaScript&#8217;in varl\u0131\u011f\u0131, bazen eri\u015filebilirlik katman\u0131n\u0131 karma\u015f\u0131kla\u015ft\u0131rabilirken, CSS-Only \u00e7\u00f6z\u00fcmler genellikle taray\u0131c\u0131n\u0131n yerle\u015fik eri\u015filebilirlik \u00f6zelliklerinden faydalan\u0131r.<\/p>\n<h3>Ger\u00e7ek D\u00fcnya Kullan\u0131m Senaryolar\u0131<\/h3>\n<p>Peki, bu yakla\u015f\u0131m hangi durumlarda parlayabilir? \u0130\u015fte baz\u0131 pratik \u00f6rnekler:<\/p>\n<ul>\n<li><strong>Basit UI Bile\u015fenleri:<\/strong> D\u00fc\u011fmeler, kartlar, uyar\u0131 mesajlar\u0131, rozetler (badges), y\u00fckleme g\u00f6stergeleri (spinners), ara\u00e7 ipu\u00e7lar\u0131 (tooltips) gibi statik veya basit etkile\u015fimli bile\u015fenler i\u00e7in idealdir. \u00d6rne\u011fin, bir \u00fcr\u00fcn kart\u0131, sadece resim, ba\u015fl\u0131k, a\u00e7\u0131klama ve fiyat i\u00e7eriyorsa, tamamen CSS ile olu\u015fturulabilir.<\/li>\n<li><strong>Form Elemanlar\u0131:<\/strong> \u00d6zel radyo d\u00fc\u011fmeleri, onay kutular\u0131 (checkboxes), se\u00e7ici kutular (select boxes) veya anahtarlar (toggles) gibi form elemanlar\u0131n\u0131n g\u00f6rsel stilizasyonu, JavaScript&#8217;e ihtiya\u00e7 duymadan yap\u0131labilir. <code>:checked<\/code> veya <code>:focus<\/code> gibi CSS pseudo-s\u0131n\u0131flar\u0131, bu elemanlar\u0131n durumlar\u0131na g\u00f6re stil de\u011fi\u015ftirmesine olanak tan\u0131r.<\/li>\n<li><strong>Navigasyon ve Sekme Men\u00fcleri:<\/strong> Basit a\u00e7\u0131l\u0131r men\u00fcler (dropdown menus) veya sekme men\u00fcleri (tabbed interfaces), <code>:hover<\/code>, <code>:focus-within<\/code> veya gizli radyo d\u00fc\u011fmeleriyle kontrol edilebilir. Bu sayede, kullan\u0131c\u0131lar JavaScript olmadan farkl\u0131 i\u00e7erik panelleri aras\u0131nda ge\u00e7i\u015f yapabilir.<\/li>\n<li><strong>G\u00f6rsel Efektler ve Animasyonlar:<\/strong> Ge\u00e7i\u015fler (transitions), animasyonlar ve transformasyonlar (transformations) tamamen CSS ile y\u00f6netilebildi\u011fi i\u00e7in, g\u00f6rsel olarak zengin bile\u015fenler olu\u015fturmak m\u00fcmk\u00fcnd\u00fcr. \u00d6rne\u011fin, bir mod\u00fcl\u00fcn a\u00e7\u0131l\u0131p kapanmas\u0131 veya bir \u00f6\u011fenin g\u00f6r\u00fcn\u00fcrl\u00fc\u011f\u00fcn\u00fcn de\u011fi\u015ftirilmesi, CSS animasyonlar\u0131yla ger\u00e7ekle\u015ftirilebilir.<\/li>\n<\/ul>\n<p>\u00d6zetle, CSS-Only Custom Elements, web geli\u015ftiricilerine daha performansl\u0131, daha basit ve daha y\u00f6netilebilir UI bile\u015fenleri olu\u015fturma konusunda g\u00fc\u00e7l\u00fc bir alternatif sunar. Her ne kadar karma\u015f\u0131k etkile\u015fimler i\u00e7in JavaScript&#8217;in yerini tutmasa da, bir\u00e7ok yayg\u0131n senaryoda m\u00fckemmel bir \u00e7\u00f6z\u00fcm olabilir ve web uygulamalar\u0131n\u0131z\u0131n genel kalitesini art\u0131rabilir.<\/p>\n<h2>Temel Ta\u015flar: CSS-Only Custom Elements Nas\u0131l M\u00fcmk\u00fcn Olur?<\/h2>\n<p>CSS-Only Custom Elements yakla\u015f\u0131m\u0131n\u0131n temelinde, HTML ve CSS&#8217;in belirli \u00f6zelliklerinin ak\u0131ll\u0131ca kullan\u0131lmas\u0131 yatar. Bu \u00f6zellikler, JavaScript&#8217;in sa\u011flad\u0131\u011f\u0131 kaps\u00fclleme, yeniden kullan\u0131labilirlik ve dinamiklik hissini, taray\u0131c\u0131n\u0131n yerle\u015fik yetenekleriyle taklit etmemizi sa\u011flar. Bu b\u00f6l\u00fcmde, bu yakla\u015f\u0131m\u0131n yap\u0131 ta\u015flar\u0131n\u0131 olu\u015fturan anahtar CSS \u00f6zelliklerini ve kavramlar\u0131n\u0131 detayl\u0131ca inceleyece\u011fiz. Bu \u00f6zellikler, her ne kadar ayr\u0131 ayr\u0131 biliniyor olsa da, bir araya geldiklerinde ger\u00e7ekten d\u00f6n\u00fc\u015ft\u00fcr\u00fcc\u00fc bir g\u00fc\u00e7 olu\u015ftururlar.<\/p>\n<h3><code>display: contents<\/code> \u00d6zelli\u011fi: DOM Yap\u0131s\u0131n\u0131 Etkilemeden G\u00f6rsel D\u00fczenleme<\/h3>\n<p><code>display: contents<\/code>, CSS-Only Custom Elements i\u00e7in belki de en kritik \u00f6zelliklerden biridir. Bu \u00f6zellik, bir eleman\u0131n kutu modelini (box model) ortadan kald\u0131r\u0131r, ancak \u00e7ocuk elemanlar\u0131n\u0131n DOM a\u011fac\u0131ndaki yerini korur. Yani, eleman\u0131n kendisi g\u00f6rsel olarak yok olur, ancak \u00e7ocuklar\u0131, ebeveynlerinin do\u011frudan \u00e7ocuklar\u0131 gibi davran\u0131r. Bu ne anlama geliyor? Bir kapsay\u0131c\u0131 <code>div<\/code>&#8216;iniz oldu\u011funu ve bu <code>div<\/code>&#8216;in i\u00e7inde \u00fc\u00e7 tane daha <code>div<\/code> oldu\u011funu d\u00fc\u015f\u00fcn\u00fcn. E\u011fer d\u0131\u015ftaki <code>div<\/code>&#8216;e <code>display: contents<\/code> verirseniz, bu d\u0131\u015ftaki <code>div<\/code>&#8216;in kenarl\u0131klar\u0131, dolgusu veya arka plan\u0131 g\u00f6r\u00fcnmez olur; ancak i\u00e7indeki \u00fc\u00e7 <code>div<\/code>, d\u0131\u015ftaki <code>div<\/code>&#8216;in ebeveyninin do\u011frudan \u00e7ocuklar\u0131ym\u0131\u015f gibi d\u00fczenlenir. Bu, \u00f6zellikle Flexbox veya Grid gibi d\u00fczen sistemleriyle \u00e7al\u0131\u015f\u0131rken \u00e7ok g\u00fc\u00e7l\u00fcd\u00fcr. Bir bile\u015fenin i\u00e7 yap\u0131s\u0131n\u0131 korurken, d\u0131\u015far\u0131dan uygulanan d\u00fczen kurallar\u0131na uyum sa\u011flamas\u0131n\u0131 m\u00fcmk\u00fcn k\u0131lar. \u00d6rne\u011fin, bir &#8220;kart&#8221; bile\u015feni olu\u015fturdunuz ve bu kart\u0131n i\u00e7inde ba\u015fl\u0131k, resim ve a\u00e7\u0131klama gibi farkl\u0131 k\u0131s\u0131mlar var. Kart\u0131n ana kapsay\u0131c\u0131s\u0131na <code>display: contents<\/code> uygulayarak, kart\u0131n i\u00e7 elemanlar\u0131n\u0131, kart\u0131n yerle\u015ftirildi\u011fi bir Flexbox veya Grid konteynerinin do\u011frudan elemanlar\u0131 gibi d\u00fczenleyebilirsiniz. Bu, bile\u015fenin d\u0131\u015far\u0131dan esnek bir \u015fekilde konumland\u0131r\u0131lmas\u0131n\u0131 sa\u011flarken, i\u00e7 yap\u0131s\u0131n\u0131n b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc korur.<\/p>\n<h3>CSS De\u011fi\u015fkenleri (Custom Properties): Dinamik Stil Y\u00f6netimi ve \u00d6zelle\u015ftirilebilirlik<\/h3>\n<p>CSS de\u011fi\u015fkenleri, modern CSS&#8217;in en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden biridir ve CSS-Only Custom Elements&#8217;in dinamik ve \u00f6zelle\u015ftirilebilir olmas\u0131n\u0131 sa\u011flar. Geleneksel olarak, bir bile\u015fenin rengini, boyutunu veya yaz\u0131 tipini de\u011fi\u015ftirmek istedi\u011finizde, do\u011frudan CSS dosyas\u0131nda ilgili kural\u0131 bulup d\u00fczenlemeniz gerekirdi. Ancak CSS de\u011fi\u015fkenleri (<code>--degisken-adi: deger;<\/code> \u015feklinde tan\u0131mlan\u0131r ve <code>var(--degisken-adi)<\/code> ile kullan\u0131l\u0131r), bu s\u00fcreci \u00e7ok daha esnek hale getirir. Bir bile\u015fenin stil \u00f6zelliklerini, HTML \u00fczerinden veya JavaScript ile (ancak bu senaryoda JavaScript&#8217;i minimumda tutuyoruz) kolayca de\u011fi\u015ftirebilirsiniz. \u00d6rne\u011fin, bir bile\u015fenin ana rengini <code>--ana-renk: #3498db;<\/code> olarak tan\u0131mlay\u0131p kullanabilir, daha sonra bu rengi farkl\u0131 bir yerde <code>--ana-renk: #e74c3c;<\/code> olarak ge\u00e7ersiz k\u0131larak bile\u015fenin g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc de\u011fi\u015ftirebilirsiniz. Bu, bile\u015fenlerin farkl\u0131 temalar veya durumlar i\u00e7in kolayca \u00f6zelle\u015ftirilebilmesini sa\u011flar ve daha mod\u00fcler bir stil mimarisi olu\u015fturur. Ayr\u0131ca, bir bile\u015fenin kullan\u0131c\u0131n\u0131n tercihine g\u00f6re (\u00f6rne\u011fin, koyu\/a\u00e7\u0131k mod) stilini dinamik olarak de\u011fi\u015ftirmesi i\u00e7in de temel olu\u015fturur.<\/p>\n<h3>Pseudo-elementler (<code>::before<\/code>, <code>::after<\/code>): Ek G\u00f6rsel \u00d6\u011feler Ekleme<\/h3>\n<p><code>::before<\/code> ve <code>::after<\/code> pseudo-elementleri, bir eleman\u0131n i\u00e7eri\u011finden ba\u011f\u0131ms\u0131z olarak ek g\u00f6rsel \u00f6\u011feler eklememizi sa\u011flar. Bu \u00f6\u011feler, DOM&#8217;da ger\u00e7ek bir eleman olarak yer almazlar, ancak CSS ile stilize edilebilirler. Bu, \u00f6zellikle bir bile\u015fene ek simgeler, dekoratif \u00e7izgiler, oklar veya kapatma d\u00fc\u011fmeleri eklemek istedi\u011fimizde \u00e7ok kullan\u0131\u015fl\u0131d\u0131r. \u00d6rne\u011fin, bir uyar\u0131 mesaj\u0131 bile\u015fenine bir &#8220;kapat&#8221; simgesi eklemek i\u00e7in, ana kapsay\u0131c\u0131n\u0131n <code>::after<\/code> pseudo-elementini kullanabilir ve ona bir \u00e7arp\u0131 i\u015fareti veya bir simge fontu atayabilirsiniz. Bu, HTML&#8217;i gereksiz <code>div<\/code>&#8216;lerden ar\u0131nd\u0131rarak daha temiz ve daha semantik kalmas\u0131n\u0131 sa\u011flar. Ayr\u0131ca, bu pseudo-elementler, bir bile\u015fenin \u00e7e\u015fitli durumlar\u0131n\u0131 (\u00f6rne\u011fin, aktif\/pasif) g\u00f6rsel olarak belirtmek i\u00e7in de kullan\u0131labilir.<\/p>\n<h3>Geli\u015fmi\u015f Se\u00e7iciler (<code>:has()<\/code>, <code>:focus-within<\/code>, Karde\u015f Se\u00e7iciler): Duruma G\u00f6re Stil Uygulama<\/h3>\n<p>CSS&#8217;in g\u00fc\u00e7l\u00fc se\u00e7ici mekanizmas\u0131, bile\u015fenlerin farkl\u0131 durumlara (state) g\u00f6re stil de\u011fi\u015ftirmesini sa\u011flar. Bu, JavaScript&#8217;in genellikle \u00fcstlendi\u011fi bir g\u00f6revi CSS&#8217;e aktar\u0131r:<\/p>\n<ul>\n<li><strong><code>:has()<\/code> Se\u00e7icisi:<\/strong> Bu yeni ve g\u00fc\u00e7l\u00fc se\u00e7ici (hen\u00fcz t\u00fcm taray\u0131c\u0131larda tam desteklenmese de), bir eleman\u0131n belirli bir alt eleman\u0131 i\u00e7erip i\u00e7ermedi\u011fine g\u00f6re stil uygulaman\u0131z\u0131 sa\u011flar. \u00d6rne\u011fin, <code>div:has(p)<\/code> se\u00e7icisi, i\u00e7inde bir paragraf (<code>p<\/code>) eleman\u0131 olan t\u00fcm <code>div<\/code>&#8216;leri se\u00e7er. Bu, bir bile\u015fenin i\u00e7indeki i\u00e7eri\u011fe g\u00f6re d\u0131\u015f g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc de\u011fi\u015ftirmek i\u00e7in inan\u0131lmaz derecede esnek bir yol sunar.<\/li>\n<li><strong><code>:focus-within<\/code> Se\u00e7icisi:<\/strong> Bir eleman veya onun herhangi bir alt eleman\u0131 odakland\u0131\u011f\u0131nda stil uygulaman\u0131z\u0131 sa\u011flar. Bu, \u00f6zellikle form elemanlar\u0131 veya a\u00e7\u0131l\u0131r men\u00fcler gibi etkile\u015fimli bile\u015fenlerde eri\u015filebilirli\u011fi ve kullan\u0131c\u0131 deneyimini art\u0131rmak i\u00e7in \u00e7ok \u00f6nemlidir. \u00d6rne\u011fin, bir form grubunun i\u00e7ine odaklan\u0131ld\u0131\u011f\u0131nda, t\u00fcm grubun kenarl\u0131\u011f\u0131n\u0131 vurgulayabilirsiniz.<\/li>\n<li><strong>Karde\u015f Se\u00e7iciler (Adjacent Sibling Selector <code>+<\/code> ve General Sibling Selector <code>~<\/code>):<\/strong> Bu se\u00e7iciler, ayn\u0131 ebeveynin \u00e7ocuklar\u0131 olan elemanlar aras\u0131nda ili\u015fki kurman\u0131z\u0131 sa\u011flar. \u00d6rne\u011fin, <code>input:checked + label<\/code> se\u00e7icisi, i\u015faretlenmi\u015f bir <code>input<\/code> eleman\u0131n\u0131n hemen ard\u0131ndan gelen <code>label<\/code> eleman\u0131n\u0131 se\u00e7er. Bu, \u00f6zellikle radyo d\u00fc\u011fmeleri veya onay kutular\u0131 gibi form elemanlar\u0131n\u0131 \u00f6zelle\u015ftirirken ve JavaScript olmadan etkile\u015fimli bile\u015fenler olu\u015ftururken kritik \u00f6neme sahiptir. Sekme men\u00fcleri veya akordiyonlar (accordions) gibi karma\u015f\u0131k etkile\u015fimler, bu se\u00e7iciler ve gizli <code>input<\/code> elemanlar\u0131 kullan\u0131larak tamamen CSS ile y\u00f6netilebilir.<\/li>\n<\/ul>\n<p>Bu temel ta\u015flar bir araya geldi\u011finde, CSS-Only Custom Elements, JavaScript&#8217;in karma\u015f\u0131kl\u0131\u011f\u0131 olmadan, etkile\u015fimli, \u00f6zelle\u015ftirilebilir ve performansl\u0131 UI bile\u015fenleri olu\u015fturmak i\u00e7in g\u00fc\u00e7l\u00fc bir temel sunar. Her bir \u00f6zelli\u011fin derinlemesine anla\u015f\u0131lmas\u0131, bu yakla\u015f\u0131m\u0131n potansiyelini tam olarak kullanmak i\u00e7in anahtard\u0131r.<\/p>\n<h2>Ad\u0131m Ad\u0131m Uygulama: Basit Bir Uyar\u0131 Mesaj\u0131 Bile\u015feni Olu\u015fturma<\/h2>\n<p>\u015eimdiye kadar CSS-Only Custom Elements&#8217;in teorik altyap\u0131s\u0131n\u0131 ve temel prensiplerini inceledik. Art\u0131k \u00f6\u011frendiklerimizi pratik bir \u00f6rnek \u00fczerinde uygulayarak, bu yakla\u015f\u0131m\u0131n g\u00fcc\u00fcn\u00fc somutla\u015ft\u0131ral\u0131m. Basit, ancak yayg\u0131n olarak kullan\u0131lan bir &#8220;uyar\u0131 mesaj\u0131&#8221; (alert message) bile\u015feni olu\u015fturaca\u011f\u0131z. Bu bile\u015fen, bir mesaj\u0131 g\u00f6r\u00fcnt\u00fcleyecek ve bir kapatma d\u00fc\u011fmesi i\u00e7erecektir. JavaScript olmadan bu etkile\u015fimi nas\u0131l sa\u011flayaca\u011f\u0131m\u0131z\u0131 g\u00f6rece\u011fiz.<\/p>\n<h3>HTML Yap\u0131s\u0131: Semantik ve Mod\u00fcler Bir Yakla\u015f\u0131m<\/h3>\n<p>Bir uyar\u0131 mesaj\u0131 i\u00e7in ihtiyac\u0131m\u0131z olan temel elemanlar: bir kapsay\u0131c\u0131, mesaj\u0131n kendisi ve bir kapatma d\u00fc\u011fmesi. Eri\u015filebilirlik ve semantik \u00f6nem ta\u015f\u0131d\u0131\u011f\u0131 i\u00e7in, m\u00fcmk\u00fcn oldu\u011funca anlaml\u0131 HTML etiketleri kullanmaya \u00f6zen g\u00f6sterece\u011fiz. Kapatma i\u015flevi i\u00e7in, gizli bir onay kutusu (checkbox) kullanaca\u011f\u0131z. Bu, CSS&#8217;in <code>:checked<\/code> pseudo-s\u0131n\u0131f\u0131n\u0131 kullanarak uyar\u0131y\u0131 gizlememizi sa\u011flayacak.<\/p>\n<div class=\"code-container\">\n<pre><code>\n&lt;div class=\"uyari-mesaji-kapsayici\"&gt;\n  &lt;input type=\"checkbox\" id=\"uyari-kapat\" class=\"uyari-kapat-input\" hidden&gt;\n  &lt;div class=\"uyari-mesaji\"&gt;\n    &lt;p&gt;Bu, sadece CSS ile olu\u015fturulmu\u015f harika bir uyar\u0131 mesaj\u0131d\u0131r!&lt;\/p&gt;\n    &lt;label for=\"uyari-kapat\" class=\"uyari-kapat-dugmesi\"&gt;X&lt;\/label&gt;\n  &lt;\/div&gt;\n&lt;\/div&gt;\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Yukar\u0131daki HTML yap\u0131s\u0131nda:<\/p>\n<ul>\n<li><code>.uyari-mesaji-kapsayici<\/code>: T\u00fcm uyar\u0131 bile\u015fenini saran ana kapsay\u0131c\u0131d\u0131r.<\/li>\n<li><code>input type=\"checkbox\"<\/code>: Bu, uyar\u0131y\u0131 gizlemek i\u00e7in bir &#8220;anahtar&#8221; g\u00f6revi g\u00f6recek gizli bir onay kutusudur. <code>id=\"uyari-kapat\"<\/code> ile bir etiketle ili\u015fkilendirilecektir. <code>hidden<\/code> niteli\u011fi, bu input&#8217;un varsay\u0131lan olarak g\u00f6r\u00fcnmemesini sa\u011flar.<\/li>\n<li><code>.uyari-mesaji<\/code>: As\u0131l uyar\u0131 i\u00e7eri\u011fini ve kapatma d\u00fc\u011fmesini bar\u0131nd\u0131ran elemand\u0131r. Bu, g\u00f6rsel olarak \u015fekillendirece\u011fimiz k\u0131s\u0131md\u0131r.<\/li>\n<li><code>p<\/code>: Uyar\u0131 mesaj\u0131n\u0131n metnini i\u00e7erir.<\/li>\n<li><code>label for=\"uyari-kapat\"<\/code>: Bu etiket, gizli onay kutusunu tetiklemek i\u00e7in kullan\u0131l\u0131r. Kullan\u0131c\u0131 bu etikete t\u0131klad\u0131\u011f\u0131nda (ki bu bizim &#8220;kapatma d\u00fc\u011fmemiz&#8221; olacak), ilgili <code>input<\/code> eleman\u0131n\u0131n <code>checked<\/code> durumu de\u011fi\u015fir. \u0130\u00e7indeki &#8220;X&#8221; metni, kapatma d\u00fc\u011fmesinin g\u00f6rselini temsil eder.<\/li>\n<\/ul>\n<h3>CSS ile G\u00f6rselle\u015ftirme ve Etkile\u015fim<\/h3>\n<p>\u015eimdi, bu HTML yap\u0131s\u0131n\u0131 kullanarak uyar\u0131 mesaj\u0131m\u0131z\u0131 stilize edelim ve JavaScript olmadan kapatma i\u015flevini ekleyelim. Unutmay\u0131n, burada do\u011frudan CSS kodu yazm\u0131yoruz, ancak hangi CSS \u00f6zelliklerinin kullan\u0131laca\u011f\u0131n\u0131 ve etkilerini a\u00e7\u0131kl\u0131yoruz.<\/p>\n<p>\u00d6ncelikle, uyar\u0131 mesaj\u0131n\u0131n ana kapsay\u0131c\u0131s\u0131na (<code>.uyari-mesaji<\/code>) temel stil \u00f6zelliklerini uygulayaca\u011f\u0131z. Buna bir arka plan rengi, metin rengi, dolgu (padding) ve kenarl\u0131k (border) verebiliriz. CSS de\u011fi\u015fkenlerini kullanarak renkleri ve dolgular\u0131 kolayca \u00f6zelle\u015ftirilebilir hale getirebiliriz:<\/p>\n<ul>\n<li><code>--uyari-arka-plan: #e0f7fa;<\/code> (A\u00e7\u0131k mavi arka plan)<\/li>\n<li><code>--uyari-metin-rengi: #006064;<\/code> (Koyu metin rengi)<\/li>\n<li><code>--uyari-kenarlik-rengi: #80deea;<\/code> (Mavi kenarl\u0131k)<\/li>\n<li><code>--uyari-dikey-dolgusu: 15px;<\/code><\/li>\n<li><code>--uyari-yatay-dolgusu: 20px;<\/code><\/li>\n<li>Bu de\u011fi\u015fkenleri <code>background-color: var(--uyari-arka-plan);<\/code> gibi kullanarak bile\u015feni \u015fekillendiririz.<\/li>\n<li><code>border: 1px solid var(--uyari-kenarlik-rengi);<\/code> ve <code>border-radius: 4px;<\/code> ile g\u00f6rsel bir \u00e7er\u00e7eve olu\u015ftururuz.<\/li>\n<li><code>padding: var(--uyari-dikey-dolgusu) var(--uyari-yatay-dolgusu);<\/code> ile i\u00e7 bo\u015fluklar\u0131 ayarlar\u0131z.<\/li>\n<li><code>display: flex;<\/code> ve <code>justify-content: space-between;<\/code> ile mesaj ve kapatma d\u00fc\u011fmesini ayn\u0131 hizaya getiririz.<\/li>\n<li><code>align-items: center;<\/code> ile dikey hizalamay\u0131 sa\u011flar\u0131z.<\/li>\n<\/ul>\n<p>Kapatma d\u00fc\u011fmesi (<code>.uyari-kapat-dugmesi<\/code>) i\u00e7in de benzer \u015fekilde stil tan\u0131mlamalar\u0131 yapar\u0131z:<\/p>\n<ul>\n<li><code>cursor: pointer;<\/code> ile \u00fczerine gelindi\u011finde t\u0131klanabilir oldu\u011funu belirtiriz.<\/li>\n<li><code>font-weight: bold;<\/code> ve <code>font-size: 1.2em;<\/code> ile &#8220;X&#8221; i\u015faretini belirginle\u015ftiririz.<\/li>\n<li><code>color: var(--uyari-metin-rengi);<\/code> ile metin rengini ayarlar\u0131z.<\/li>\n<li>\u00dczerine gelindi\u011finde veya odakland\u0131\u011f\u0131nda rengini de\u011fi\u015ftirmek i\u00e7in <code>:hover<\/code> ve <code>:focus<\/code> pseudo-s\u0131n\u0131flar\u0131n\u0131 kullan\u0131r\u0131z, \u00f6rne\u011fin rengini biraz koyula\u015ft\u0131r\u0131r\u0131z.<\/li>\n<\/ul>\n<p>\u015eimdi gelelim can al\u0131c\u0131 noktaya: uyar\u0131y\u0131 gizleme mekanizmas\u0131. Burada gizli <code>input type=\"checkbox\"<\/code> ve onun <code>:checked<\/code> pseudo-s\u0131n\u0131f\u0131n\u0131 kullanaca\u011f\u0131z. Kullan\u0131c\u0131 kapatma d\u00fc\u011fmesine (<code>label<\/code>) t\u0131klad\u0131\u011f\u0131nda, <code>input#uyari-kapat<\/code> eleman\u0131 <code>:checked<\/code> durumuna ge\u00e7er. Bu durumu kullanarak, <code>.uyari-mesaji<\/code> eleman\u0131n\u0131n g\u00f6r\u00fcn\u00fcrl\u00fc\u011f\u00fcn\u00fc de\u011fi\u015ftirebiliriz:<\/p>\n<ul>\n<li><code>.uyari-kapat-input:checked ~ .uyari-mesaji<\/code> se\u00e7icisi, i\u015faretlenmi\u015f <code>input<\/code> eleman\u0131n\u0131n hemen ard\u0131ndan gelen <code>.uyari-mesaji<\/code> eleman\u0131n\u0131 hedefler.<\/li>\n<li>Bu se\u00e7iciye <code>display: none;<\/code> veya <code>opacity: 0; visibility: hidden; transition: all 0.3s ease-in-out;<\/code> gibi \u00f6zellikler uygulayarak uyar\u0131 mesaj\u0131n\u0131 gizleyebiliriz. \u0130kinci y\u00f6ntem, daha yumu\u015fak bir ge\u00e7i\u015f sa\u011flar.<\/li>\n<\/ul>\n<p>Bu basit \u00f6rnek, JavaScript&#8217;e ihtiya\u00e7 duymadan nas\u0131l etkile\u015fimli bir UI bile\u015feni olu\u015fturulabilece\u011fini g\u00f6stermektedir. Kullan\u0131c\u0131, kapatma d\u00fc\u011fmesine t\u0131klad\u0131\u011f\u0131nda, taray\u0131c\u0131 sadece HTML ve CSS kurallar\u0131n\u0131 i\u015fleyerek uyar\u0131 mesaj\u0131n\u0131 gizler. Bu, web uygulaman\u0131z\u0131n daha h\u0131zl\u0131 y\u00fcklenmesini sa\u011flar ve JavaScript ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n\u0131 azalt\u0131r.<\/p>\n<p>Bu y\u00f6ntemin temel avantaj\u0131, sadece HTML ve CSS kullanarak i\u015flevsellik sa\u011flamas\u0131d\u0131r. Bile\u015fen, JavaScript y\u00fcklenmeden \u00f6nce bile do\u011fru \u015fekilde \u00e7al\u0131\u015f\u0131r ve taray\u0131c\u0131n\u0131n yerle\u015fik mekanizmalar\u0131ndan faydalan\u0131r. Ayr\u0131ca, CSS de\u011fi\u015fkenleri sayesinde, farkl\u0131 uyar\u0131 tipleri (ba\u015far\u0131l\u0131, hata, bilgi) i\u00e7in kolayca farkl\u0131 renk \u015femalar\u0131 tan\u0131mlayabilirsiniz, sadece ilgili de\u011fi\u015fkenlerin de\u011ferlerini de\u011fi\u015ftirerek.<\/p>\n<h2>Daha Karma\u015f\u0131k Bile\u015fenler: CSS-Only Sekme (Tab) Men\u00fcs\u00fc Nas\u0131l Yap\u0131l\u0131r?<\/h2>\n<p>Basit bir uyar\u0131 mesaj\u0131 \u00f6rne\u011fi, CSS-Only Custom Elements&#8217;in temelini anlamak i\u00e7in iyi bir ba\u015flang\u0131\u00e7t\u0131. \u015eimdi, daha karma\u015f\u0131k bir etkile\u015fim olan &#8220;sekme (tab) men\u00fcs\u00fc&#8221; bile\u015fenini ele alarak, bu yakla\u015f\u0131m\u0131n s\u0131n\u0131rlar\u0131n\u0131 nas\u0131l geni\u015fletebilece\u011fimizi g\u00f6relim. Sekme men\u00fcleri, i\u00e7eri\u011fi d\u00fczenli bir \u015fekilde sunmak i\u00e7in yayg\u0131n olarak kullan\u0131l\u0131r ve genellikle JavaScript ile olu\u015fturulur. Ancak, do\u011fru HTML yap\u0131s\u0131 ve CSS se\u00e7icileriyle, bu i\u015flevselli\u011fi tamamen CSS ile sa\u011flayabiliriz.<\/p>\n<h3>HTML Yap\u0131s\u0131: Radyo D\u00fc\u011fmeleri ve Etiketlerin G\u00fcc\u00fc<\/h3>\n<p>Sekme men\u00fcs\u00fc i\u00e7in anahtar fikir, her sekme ba\u015fl\u0131\u011f\u0131n\u0131 bir <code>label<\/code> eleman\u0131 ile ili\u015fkilendirilmi\u015f gizli bir <code>input type=\"radio\"<\/code> eleman\u0131na ba\u011flamakt\u0131r. Radyo d\u00fc\u011fmeleri, do\u011fas\u0131 gere\u011fi yaln\u0131zca bir tanesinin se\u00e7ili olabilece\u011fi bir grup olu\u015fturur. Bu \u00f6zellik, sekme men\u00fcs\u00fcn\u00fcn &#8220;bir anda yaln\u0131zca bir sekme aktif olabilir&#8221; mant\u0131\u011f\u0131na m\u00fckemmel bir \u015fekilde uyar. Her sekme i\u00e7eri\u011fi de, ilgili radyo d\u00fc\u011fmesinin durumuna g\u00f6re g\u00f6r\u00fcn\u00fcr hale getirilecektir.<\/p>\n<div class=\"code-container\">\n<pre><code>\n&lt;div class=\"sekme-kapsayici\"&gt;\n  &lt;div class=\"sekme-basliklari\"&gt;\n    &lt;input type=\"radio\" name=\"sekme-grubu\" id=\"sekme1\" checked hidden&gt;\n    &lt;label for=\"sekme1\"&gt;Sekme 1&lt;\/label&gt;\n\n    &lt;input type=\"radio\" name=\"sekme-grubu\" id=\"sekme2\" hidden&gt;\n    &lt;label for=\"sekme2\"&gt;Sekme 2&lt;\/label&gt;\n\n    &lt;input type=\"radio\" name=\"sekme-grubu\" id=\"sekme3\" hidden&gt;\n    &lt;label for=\"sekme3\"&gt;Sekme 3&lt;\/label&gt;\n  &lt;\/div&gt;\n\n  &lt;div class=\"sekme-icerikleri\"&gt;\n    &lt;div class=\"sekme-icerik\" id=\"icerik1\"&gt;\n      &lt;h3&gt;Sekme 1 \u0130\u00e7eri\u011fi&lt;\/h3&gt;\n      &lt;p&gt;Bu, Sekme 1'e ait bilgileri i\u00e7eren b\u00f6l\u00fcmd\u00fcr. CSS ile y\u00f6netiliyor!&lt;\/p&gt;\n    &lt;\/div&gt;\n\n    &lt;div class=\"sekme-icerik\" id=\"icerik2\"&gt;\n      &lt;h3&gt;Sekme 2 \u0130\u00e7eri\u011fi&lt;\/h3&gt;\n      &lt;p&gt;Sekme 2'nin detayl\u0131 i\u00e7eri\u011fi burada yer al\u0131yor. Performans odakl\u0131 bir \u00e7\u00f6z\u00fcm.&lt;\/p&gt;\n    &lt;\/div&gt;\n\n    &lt;div class=\"sekme-icerik\" id=\"icerik3\"&gt;\n      &lt;h3&gt;Sekme 3 \u0130\u00e7eri\u011fi&lt;\/h3&gt;\n      &lt;p&gt;Son sekmemizin i\u00e7eri\u011fi. JavaScript'e veda edin!&lt;\/p&gt;\n    &lt;\/div&gt;\n  &lt;\/div&gt;\n&lt;\/div&gt;\n      <\/code><\/pre>\n<\/p><\/div>\n<p>Bu HTML yap\u0131s\u0131nda dikkat edilmesi gerekenler:<\/p>\n<ul>\n<li><code>.sekme-kapsayici<\/code>: T\u00fcm sekme bile\u015fenini saran ana kapsay\u0131c\u0131.<\/li>\n<li><code>.sekme-basliklari<\/code>: Sekme ba\u015fl\u0131klar\u0131n\u0131 (<code>label<\/code> elemanlar\u0131n\u0131) i\u00e7eren b\u00f6l\u00fcm.<\/li>\n<li><code>input type=\"radio\"<\/code>: Her sekme i\u00e7in bir tane olmak \u00fczere gizli radyo d\u00fc\u011fmeleri.\n<ul>\n<li>T\u00fcm radyo d\u00fc\u011fmelerinin <code>name<\/code> niteli\u011fi ayn\u0131 olmal\u0131 (\u00f6rne\u011fin, <code>sekme-grubu<\/code>) ki sadece bir tanesi ayn\u0131 anda se\u00e7ili olabilsin.<\/li>\n<li>Her birine benzersiz bir <code>id<\/code> (<code>sekme1<\/code>, <code>sekme2<\/code> vb.) verilir.<\/li>\n<li><code>checked<\/code> niteli\u011fi, ba\u015flang\u0131\u00e7ta hangi sekmenin aktif olaca\u011f\u0131n\u0131 belirler.<\/li>\n<li><code>hidden<\/code> niteli\u011fi, radyo d\u00fc\u011fmelerinin kendilerinin g\u00f6r\u00fcnmemesini sa\u011flar.<\/li>\n<\/ul>\n<\/li>\n<li><code>label for=\"sekmeX\"<\/code>: Her radyo d\u00fc\u011fmesiyle ili\u015fkilendirilmi\u015f sekme ba\u015fl\u0131\u011f\u0131. Kullan\u0131c\u0131 bu etikete t\u0131klad\u0131\u011f\u0131nda, ilgili radyo d\u00fc\u011fmesi se\u00e7ili hale gelir.<\/li>\n<li><code>.sekme-icerikleri<\/code>: T\u00fcm sekme i\u00e7eriklerini bar\u0131nd\u0131ran kapsay\u0131c\u0131.<\/li>\n<li><code>.sekme-icerik<\/code>: Her bir sekmenin ger\u00e7ek i\u00e7eri\u011fini bar\u0131nd\u0131ran b\u00f6l\u00fcm. <code>id<\/code> nitelikleri, ilgili radyo d\u00fc\u011fmelerinin <code>id<\/code>&#8216;leri ile e\u015fle\u015fecek \u015fekilde ayarlanabilir (bu, CSS se\u00e7icilerinde yard\u0131mc\u0131 olabilir).<\/li>\n<\/ul>\n<h3>CSS ile Sekme Ge\u00e7i\u015f Mant\u0131\u011f\u0131 ve G\u00f6rsel Stilizasyon<\/h3>\n<p>\u015eimdi bu HTML yap\u0131s\u0131n\u0131 stilize edelim ve sekme ge\u00e7i\u015flerini JavaScript olmadan nas\u0131l y\u00f6netece\u011fimizi g\u00f6relim. Yine, do\u011frudan CSS kodu yazm\u0131yoruz, ancak hangi \u00f6zelliklerin ve se\u00e7icilerin kullan\u0131laca\u011f\u0131n\u0131 a\u00e7\u0131kl\u0131yoruz.<\/p>\n<p>\u0130lk olarak, t\u00fcm sekme i\u00e7eriklerini varsay\u0131lan olarak gizleyece\u011fiz:<\/p>\n<ul>\n<li><code>.sekme-icerik { display: none; }<\/code> veya <code>visibility: hidden; opacity: 0; transition: all 0.3s ease-in-out;<\/code> ile i\u00e7erikleri gizleriz. Ge\u00e7i\u015fli y\u00f6ntem, daha yumu\u015fak bir kullan\u0131c\u0131 deneyimi sunar.<\/li>\n<\/ul>\n<p>Ard\u0131ndan, radyo d\u00fc\u011fmelerinin <code>:checked<\/code> durumunu kullanarak hangi i\u00e7eri\u011fin g\u00f6sterilece\u011fini belirleyece\u011fiz. Burada genel karde\u015f se\u00e7ici (<code>~<\/code>) kritik rol oynar:<\/p>\n<ul>\n<li><code>#sekme1:checked ~ .sekme-icerikleri #icerik1 { display: block; }<\/code> (veya <code>visibility: visible; opacity: 1;<\/code>) se\u00e7icisi, <code>id=\"sekme1\"<\/code> radyo d\u00fc\u011fmesi i\u015faretlendi\u011finde, onun karde\u015f eleman\u0131 olan <code>.sekme-icerikleri<\/code> i\u00e7indeki <code>id=\"icerik1\"<\/code> eleman\u0131n\u0131 g\u00f6r\u00fcn\u00fcr hale getirir. Bu kural\u0131 her sekme i\u00e7in tekrarlayarak, se\u00e7ili radyo d\u00fc\u011fmesine kar\u015f\u0131l\u0131k gelen i\u00e7eri\u011fi g\u00f6sterebiliriz.<\/li>\n<\/ul>\n<p>Sekme ba\u015fl\u0131klar\u0131n\u0131n (<code>label<\/code>) stilini de ayarlamam\u0131z gerekiyor. Se\u00e7ili sekmeyi g\u00f6rsel olarak vurgulamak i\u00e7in yine <code>:checked<\/code> durumunu kullanabiliriz:<\/p>\n<ul>\n<li><code>.sekme-basliklari label { cursor: pointer; padding: 10px 20px; border: 1px solid #ccc; border-bottom: none; }<\/code> gibi temel stiller tan\u0131mlar\u0131z.<\/li>\n<li>Aktif sekme ba\u015fl\u0131\u011f\u0131 i\u00e7in: <code>#sekme1:checked + label { background-color: #fff; border-color: #3498db; color: #3498db; }<\/code> gibi bir kural kullan\u0131r\u0131z. Burada biti\u015fik karde\u015f se\u00e7ici (<code>+<\/code>) kullanmak \u00f6nemlidir, \u00e7\u00fcnk\u00fc <code>label<\/code> eleman\u0131, <code>input<\/code> eleman\u0131n\u0131n hemen ard\u0131ndan gelir.<\/li>\n<li>CSS de\u011fi\u015fkenleri (<code>--aktif-sekme-rengi: #3498db;<\/code>, <code>--pasif-sekme-rengi: #ccc;<\/code>) ile renkleri ve di\u011fer \u00f6zellikleri kolayca y\u00f6netebiliriz.<\/li>\n<li>Flexbox veya Grid kullanarak <code>.sekme-basliklari<\/code> eleman\u0131n\u0131n i\u00e7indeki etiketleri yan yana d\u00fczenleyebiliriz.<\/li>\n<\/ul>\n<h3>Eri\u015filebilirlik \u0130pu\u00e7lar\u0131<\/h3>\n<p>CSS-Only sekme men\u00fcs\u00fc olu\u015ftururken eri\u015filebilirli\u011fi g\u00f6z ard\u0131 etmemeliyiz:<\/p>\n<ul>\n<li><strong>Semantik HTML:<\/strong> Radyo d\u00fc\u011fmeleri ve etiketlerin kullan\u0131lmas\u0131, ekran okuyucular i\u00e7in do\u011fal bir yap\u0131 sa\u011flar.<\/li>\n<li><strong>Klavye Navigasyonu:<\/strong> Radyo d\u00fc\u011fmeleri varsay\u0131lan olarak klavye ile gezilebilir oldu\u011fundan (Tab tu\u015fu ile), kullan\u0131c\u0131lar sekmeler aras\u0131nda klavye ile ge\u00e7i\u015f yapabilir.<\/li>\n<li><strong><code>aria<\/code> Nitelikleri:<\/strong> Geli\u015fmi\u015f eri\u015filebilirlik i\u00e7in <code>role=\"tablist\"<\/code>, <code>role=\"tab\"<\/code> ve <code>role=\"tabpanel\"<\/code> gibi ARIA nitelikleri eklenebilir. Ancak, bu nitelikler HTML&#8217;e eklense bile, JavaScript olmadan dinamik <code>aria-selected<\/code> veya <code>aria-controls<\/code> g\u00fcncellemeleri yap\u0131lamayaca\u011f\u0131n\u0131 unutmamak gerekir. Bu nedenle, CSS-Only yakla\u015f\u0131m\u0131nda temel semantik HTML&#8217;e g\u00fcvenmek daha yayg\u0131nd\u0131r.<\/li>\n<\/ul>\n<p>Bu sekme men\u00fcs\u00fc \u00f6rne\u011fi, CSS&#8217;in ne kadar g\u00fc\u00e7l\u00fc olabilece\u011fini ve JavaScript&#8217;in genellikle \u00fcstlendi\u011fi karma\u015f\u0131k etkile\u015fimleri bile nas\u0131l taklit edebilece\u011fini g\u00f6stermektedir. Bu teknik, \u00f6zellikle i\u00e7erik odakl\u0131 web sitelerinde veya statik dok\u00fcmantasyon sayfalar\u0131nda, performans ve basitlikten \u00f6d\u00fcn vermeden zengin bir kullan\u0131c\u0131 deneyimi sunmak i\u00e7in harika bir yoldur.<\/p>\n<h2>Eri\u015filebilirlik ve Performans \u0130pu\u00e7lar\u0131: Daha \u0130yi CSS-Only Bile\u015fenleri \u0130\u00e7in<\/h2>\n<p>CSS-Only Custom Elements yakla\u015f\u0131m\u0131n\u0131n temelinde basitlik ve performans yatar. Ancak, bu bile\u015fenleri tasarlarken ve uygularken, kullan\u0131c\u0131 deneyiminin vazge\u00e7ilmez bir par\u00e7as\u0131 olan eri\u015filebilirli\u011fi ve uzun vadeli s\u00fcrd\u00fcr\u00fclebilirli\u011fi etkileyen performans fakt\u00f6rlerini g\u00f6z ard\u0131 etmemeliyiz. Bu b\u00f6l\u00fcmde, daha iyi ve daha kapsay\u0131c\u0131 CSS-Only bile\u015fenleri olu\u015fturmak i\u00e7in dikkat etmemiz gereken \u00f6nemli ipu\u00e7lar\u0131n\u0131 ve stratejileri ele alaca\u011f\u0131z.<\/p>\n<h3>Semantik HTML&#8217;in \u00d6nemi<\/h3>\n<p>CSS-Only yakla\u015f\u0131m\u0131n\u0131n en b\u00fcy\u00fck avantajlar\u0131ndan biri, genellikle JavaScript framework&#8217;lerinin getirdi\u011fi DOM manip\u00fclasyonu ve karma\u015f\u0131k i\u00e7 i\u00e7e ge\u00e7mi\u015f <code>div<\/code> yap\u0131lar\u0131ndan ka\u00e7\u0131narak, daha temiz ve semantik HTML kullanmaya te\u015fvik etmesidir. Semantik HTML, web i\u00e7eri\u011finin anlam\u0131n\u0131 taray\u0131c\u0131lara, arama motorlar\u0131na ve ekran okuyucular\u0131na do\u011fru bir \u015fekilde iletir. \u00d6rne\u011fin:<\/p>\n<ul>\n<li>Bir navigasyon men\u00fcs\u00fc i\u00e7in <code>&lt;nav&gt;<\/code> ve <code>&lt;ul&gt;&lt;li&gt;<\/code> kullanmak, sadece bir dizi <code>&lt;div&gt;<\/code> kullanmaktan \u00e7ok daha iyidir.<\/li>\n<li>Bir d\u00fc\u011fme i\u00e7in <code>&lt;button&gt;<\/code> eleman\u0131 kullanmak, bir <code>&lt;div&gt;<\/code> veya <code>&lt;span&gt;<\/code> eleman\u0131na t\u0131klama olay\u0131 atamaktan daha eri\u015filebilirdir, \u00e7\u00fcnk\u00fc <code>&lt;button&gt;<\/code> eleman\u0131 klavye etkile\u015fimlerini ve ekran okuyucu rollerini do\u011fal olarak destekler.<\/li>\n<li>Form elemanlar\u0131 i\u00e7in <code>&lt;input&gt;<\/code> ve <code>&lt;label&gt;<\/code> elemanlar\u0131n\u0131 do\u011fru \u015fekilde ili\u015fkilendirmek, kullan\u0131c\u0131lara ve ekran okuyucular\u0131na do\u011fru ba\u011flam\u0131 sa\u011flar.<\/li>\n<\/ul>\n<p>Semantik HTML kullan\u0131m\u0131, bile\u015fenlerinizin varsay\u0131lan olarak daha eri\u015filebilir olmas\u0131n\u0131 sa\u011flar ve JavaScript olmadan bile temel etkile\u015fimlerin (\u00f6rne\u011fin, klavye ile odaklanma) \u00e7al\u0131\u015fmas\u0131na yard\u0131mc\u0131 olur.<\/p>\n<h3>Klavye Navigasyonu ve Odak Y\u00f6netimi<\/h3>\n<p>Web siteleri sadece fare ile de\u011fil, klavye ile de kullan\u0131labilmelidir. Sekme (Tab) tu\u015fu ile elemanlar aras\u0131nda gezinebilme ve Enter\/Space tu\u015flar\u0131 ile etkile\u015fim kurabilme yetene\u011fi, \u00f6zellikle motor becerileri k\u0131s\u0131tl\u0131 kullan\u0131c\u0131lar veya g\u00fc\u00e7 kullan\u0131c\u0131lar\u0131 i\u00e7in \u00e7ok \u00f6nemlidir. CSS-Only bile\u015fenler olu\u015ftururken:<\/p>\n<ul>\n<li>Etkile\u015fimli elemanlar i\u00e7in (d\u00fc\u011fmeler, ba\u011flant\u0131lar, form elemanlar\u0131) her zaman do\u011fal olarak odaklanabilir HTML elemanlar\u0131n\u0131 kullan\u0131n.<\/li>\n<li>\u00d6zel etkile\u015fimler i\u00e7in (\u00f6rne\u011fin, sekme men\u00fcs\u00fc), radyo d\u00fc\u011fmeleri gibi klavye ile gezilebilir elemanlar\u0131 kullan\u0131n.<\/li>\n<li><code>:focus<\/code> ve <code>:focus-visible<\/code> pseudo-s\u0131n\u0131flar\u0131n\u0131 kullanarak odaklanm\u0131\u015f elemanlar\u0131 g\u00f6rsel olarak belirginle\u015ftirin. Bu, kullan\u0131c\u0131lar\u0131n o an hangi elemana odakland\u0131klar\u0131n\u0131 anlamalar\u0131na yard\u0131mc\u0131 olur.<\/li>\n<li><code>tabindex<\/code> niteli\u011fini dikkatli kullan\u0131n. Genellikle, <code>tabindex=\"0\"<\/code> ile elemanlar\u0131 odaklanabilir yapmak veya <code>tabindex=\"-1\"<\/code> ile programatik olarak odaklanabilir hale getirmek m\u00fcmk\u00fcnd\u00fcr, ancak varsay\u0131lan odaklanma s\u0131ras\u0131n\u0131 bozmaktan ka\u00e7\u0131n\u0131n.<\/li>\n<\/ul>\n<h3>Ekran Okuyucular \u0130\u00e7in ARIA Nitelikleri<\/h3>\n<p>ARIA (Accessible Rich Internet Applications) nitelikleri, semantik HTML&#8217;in yetersiz kald\u0131\u011f\u0131 durumlarda, ekran okuyuculara daha fazla bilgi sa\u011flamak i\u00e7in kullan\u0131l\u0131r. CSS-Only bile\u015fenlerde JavaScript olmad\u0131\u011f\u0131 i\u00e7in dinamik ARIA g\u00fcncellemeleri yapamay\u0131z. Ancak, statik ARIA niteliklerini yine de kullanabiliriz:<\/p>\n<ul>\n<li>Bir a\u00e7\u0131l\u0131r men\u00fc i\u00e7in <code>role=\"menu\"<\/code> ve <code>role=\"menuitem\"<\/code> gibi nitelikler ekleyebiliriz.<\/li>\n<li>Bir uyar\u0131 mesaj\u0131 i\u00e7in <code>role=\"alert\"<\/code> veya <code>aria-live=\"polite\"<\/code> gibi nitelikler, ekran okuyucular\u0131n i\u00e7eri\u011fi hemen veya uygun bir zamanda duyurmas\u0131n\u0131 sa\u011flayabilir.<\/li>\n<li>Ancak, <code>aria-expanded<\/code> veya <code>aria-selected<\/code> gibi dinamik durumlar\u0131 yans\u0131tan nitelikler, JavaScript olmadan g\u00fcncellenemeyece\u011fi i\u00e7in, bu t\u00fcr bile\u015fenlerde tam ARIA deste\u011fi s\u0131n\u0131rl\u0131 kalacakt\u0131r. Bu durumda, tasar\u0131m\u0131n basitli\u011fine ve semantik HTML&#8217;in do\u011fal eri\u015filebilirli\u011fine daha fazla g\u00fcvenmek gerekir.<\/li>\n<\/ul>\n<h3>Performans: Gereksiz DOM Elemanlar\u0131ndan Ka\u00e7\u0131nma ve Minimal \u0130\u015faretleme<\/h3>\n<p>Performans, CSS-Only yakla\u015f\u0131m\u0131n\u0131n temel nedenlerinden biridir. Bu avantaj\u0131 korumak i\u00e7in:<\/p>\n<ul>\n<li><strong>Minimal DOM Yap\u0131s\u0131:<\/strong> M\u00fcmk\u00fcn oldu\u011funca az HTML eleman\u0131 kullanmaya \u00e7al\u0131\u015f\u0131n. Her ek eleman, taray\u0131c\u0131n\u0131n i\u015fleme s\u00fcresini art\u0131r\u0131r. Pseudo-elementler (<code>::before<\/code>, <code>::after<\/code>) bu konuda harika bir \u00e7\u00f6z\u00fcmd\u00fcr, \u00e7\u00fcnk\u00fc DOM&#8217;a ger\u00e7ek eleman eklemeden g\u00f6rsel \u00f6\u011feler olu\u015ftururlar.<\/li>\n<li><strong><code>display: contents<\/code> Ak\u0131ll\u0131ca Kullan\u0131m\u0131:<\/strong> Bu \u00f6zellik, gereksiz kapsay\u0131c\u0131 elemanlar\u0131n kutu modelini ortadan kald\u0131rarak, d\u00fczen hesaplamalar\u0131n\u0131 basitle\u015ftirebilir. Ancak, eri\u015filebilirlik a\u00e7\u0131s\u0131ndan baz\u0131 taray\u0131c\u0131larda sorunlar ya\u015fanabilece\u011fi i\u00e7in, kullan\u0131m\u0131n\u0131 dikkatlice test etmek \u00f6nemlidir.<\/li>\n<li><strong>CSS De\u011fi\u015fkenlerinin Etkin Kullan\u0131m\u0131:<\/strong> Tekrar eden de\u011ferlerden ka\u00e7\u0131nmak ve stil de\u011fi\u015fikliklerini merkezile\u015ftirmek i\u00e7in CSS de\u011fi\u015fkenlerini kullan\u0131n. Bu, CSS dosyas\u0131n\u0131n boyutunu k\u00fc\u00e7\u00fcltebilir ve taray\u0131c\u0131n\u0131n stil hesaplamalar\u0131n\u0131 optimize edebilir.<\/li>\n<li><strong>CSS Se\u00e7icilerini Optimize Etme:<\/strong> \u00c7ok karma\u015f\u0131k veya a\u015f\u0131r\u0131 genelle\u015ftirilmi\u015f se\u00e7icilerden ka\u00e7\u0131n\u0131n. Taray\u0131c\u0131lar\u0131n stil e\u015fle\u015ftirmesi i\u00e7in daha az i\u015f yapmas\u0131, performans\u0131 art\u0131r\u0131r.<\/li>\n<\/ul>\n<h3>Taray\u0131c\u0131 Uyumlulu\u011fu ve Fallback Stratejileri<\/h3>\n<p>Yeni CSS \u00f6zellikleri (\u00f6rne\u011fin, <code>:has()<\/code> se\u00e7icisi veya baz\u0131 geli\u015fmi\u015f Grid \u00f6zellikleri) hen\u00fcz t\u00fcm taray\u0131c\u0131larda tam olarak desteklenmeyebilir. Bu durumda:<\/p>\n<ul>\n<li><strong>Taray\u0131c\u0131 Uyumlulu\u011funu Kontrol Edin:<\/strong> Can I use&#8230; gibi kaynaklar\u0131 kullanarak kulland\u0131\u011f\u0131n\u0131z CSS \u00f6zelliklerinin taray\u0131c\u0131 deste\u011fini kontrol edin.<\/li>\n<li><strong>Fallback (Geriye D\u00f6n\u00fck Uyumluluk) Stratejileri:<\/strong> Kritik \u00f6zellikler i\u00e7in daha geni\u015f taray\u0131c\u0131 deste\u011fine sahip alternatif stiller sa\u011flay\u0131n. \u00d6rne\u011fin, <code>display: grid;<\/code> desteklenmiyorsa, <code>display: flex;<\/code> veya eski d\u00fczen y\u00f6ntemleriyle \u00e7al\u0131\u015fan bir fallback stil sa\u011flayabilirsiniz.<\/li>\n<li><strong>Progresif Geli\u015ftirme (Progressive Enhancement):<\/strong> Temel i\u015flevselli\u011fi en temel taray\u0131c\u0131larda bile \u00e7al\u0131\u015facak \u015fekilde tasarlay\u0131n ve daha modern taray\u0131c\u0131larda geli\u015fmi\u015f \u00f6zellikler sunun. Bu, t\u00fcm kullan\u0131c\u0131lar\u0131n en az\u0131ndan temel deneyimi almas\u0131n\u0131 sa\u011flar.<\/li>\n<\/ul>\n<p>Bu ipu\u00e7lar\u0131n\u0131 uygulayarak, CSS-Only Custom Elements&#8217;lerinizin sadece performansl\u0131 de\u011fil, ayn\u0131 zamanda eri\u015filebilir, s\u00fcrd\u00fcr\u00fclebilir ve geni\u015f bir kullan\u0131c\u0131 kitlesi taraf\u0131ndan kullan\u0131labilir olmas\u0131n\u0131 sa\u011flayabilirsiniz. Bu, modern web geli\u015ftirmenin temel prensiplerinden biridir.<\/p>\n<h2>S\u0131n\u0131rlar ve Ne Zaman Kullan\u0131lmamal\u0131?<\/h2>\n<p>CSS-Only Custom Elements yakla\u015f\u0131m\u0131, web geli\u015ftirmede bir\u00e7ok avantaj sunsa da, her problem i\u00e7in evrensel bir \u00e7\u00f6z\u00fcm de\u011fildir. Her ara\u00e7 gibi, bu yakla\u015f\u0131m\u0131n da kendi s\u0131n\u0131rlar\u0131 ve belirli senaryolarda tercih edilmemesi gereken durumlar\u0131 vard\u0131r. Bu b\u00f6l\u00fcmde, CSS-Only bile\u015fenlerin ne zaman yetersiz kalaca\u011f\u0131n\u0131 ve ne zaman ger\u00e7ek JavaScript tabanl\u0131 \u00e7\u00f6z\u00fcmlere veya Web Components API&#8217;sine ba\u015fvurman\u0131n daha uygun olaca\u011f\u0131n\u0131 inceleyece\u011fiz. Bu dengeyi anlamak, projeleriniz i\u00e7in do\u011fru teknoloji se\u00e7imini yapman\u0131z a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir.<\/p>\n<h3>JavaScript&#8217;in Vazge\u00e7ilmez Oldu\u011fu Durumlar<\/h3>\n<p>CSS-Only yakla\u015f\u0131m\u0131, belirli t\u00fcrdeki etkile\u015fimleri taklit edebilirken, JavaScript&#8217;in sundu\u011fu dinamik ve programatik yeteneklerin yerini tutamaz. A\u015fa\u011f\u0131daki senaryolarda JavaScript&#8217;e ihtiya\u00e7 duyulur:<\/p>\n<ul>\n<li><strong>Karma\u015f\u0131k Etkile\u015fimler ve Durum Y\u00f6netimi:<\/strong> Kullan\u0131c\u0131n\u0131n birden fazla eylemine ba\u011fl\u0131 olarak de\u011fi\u015fen, karma\u015f\u0131k durum (state) y\u00f6netimi gerektiren bile\u015fenler (\u00f6rne\u011fin, s\u00fcr\u00fckle-b\u0131rak i\u015flevselli\u011fi, \u00e7ok ad\u0131ml\u0131 formlar, ger\u00e7ek zamanl\u0131 g\u00fcncellemeler). CSS, genellikle sadece ikili (a\u00e7\u0131k\/kapal\u0131, se\u00e7ili\/se\u00e7ili de\u011fil) durumlar\u0131 y\u00f6netebilir.<\/li>\n<li><strong>DOM Manip\u00fclasyonu:<\/strong> Bile\u015fenin i\u00e7eri\u011fini veya yap\u0131s\u0131n\u0131 dinamik olarak de\u011fi\u015ftirmesi gereken durumlar (\u00f6rne\u011fin, bir liste eleman\u0131n\u0131n eklenmesi\/\u00e7\u0131kar\u0131lmas\u0131, bir resim galerisinde dinamik olarak resim y\u00fcklenmesi). CSS, mevcut elemanlar\u0131n stilini de\u011fi\u015ftirebilir, ancak yeni elemanlar olu\u015fturamaz veya mevcut elemanlar\u0131 tamamen kald\u0131ramaz.<\/li>\n<li><strong>D\u0131\u015f API Entegrasyonu:<\/strong> Sunucuyla ileti\u015fim kurmas\u0131, veri \u00e7ekmesi veya g\u00f6ndermesi gereken bile\u015fenler (\u00f6rne\u011fin, hava durumu widget&#8217;lar\u0131, sosyal medya ak\u0131\u015flar\u0131, arama \u00e7ubuklar\u0131). Bu t\u00fcr i\u015flevsellikler i\u00e7in fetch API veya XMLHttpRequest gibi JavaScript API&#8217;leri gereklidir.<\/li>\n<li><strong>Kullan\u0131c\u0131 Giri\u015fini Do\u011frulama:<\/strong> Form alanlar\u0131n\u0131n karma\u015f\u0131k do\u011frulama kurallar\u0131 (\u00f6rne\u011fin, e-posta format\u0131 kontrol\u00fc, \u015fifre g\u00fcc\u00fc analizi) JavaScript olmadan etkili bir \u015fekilde yap\u0131lamaz. HTML5 do\u011frulama yeterli olsa da, daha geli\u015fmi\u015f senaryolar i\u00e7in JavaScript \u015fartt\u0131r.<\/li>\n<li><strong>Animasyon Kontrol\u00fc:<\/strong> Kullan\u0131c\u0131 etkile\u015fimlerine veya di\u011fer olaylara ba\u011fl\u0131 olarak karma\u015f\u0131k, zamanlanm\u0131\u015f veya duraklat\u0131labilir\/oynat\u0131labilir animasyonlar. CSS animasyonlar\u0131 g\u00fc\u00e7l\u00fcd\u00fcr, ancak JavaScript, animasyonlar\u0131n ya\u015fam d\u00f6ng\u00fcs\u00fc \u00fczerinde daha fazla kontrol sa\u011flar.<\/li>\n<li><strong>Eri\u015filebilirlik i\u00e7in Dinamik ARIA G\u00fcncellemeleri:<\/strong> <code>aria-expanded<\/code> veya <code>aria-selected<\/code> gibi niteliklerin, bile\u015fenin mevcut durumunu yans\u0131tacak \u015fekilde dinamik olarak g\u00fcncellenmesi gerekti\u011finde JavaScript&#8217;e ihtiya\u00e7 duyulur. CSS-Only \u00e7\u00f6z\u00fcmlerde bu nitelikler statik kal\u0131r.<\/li>\n<\/ul>\n<h3>Taray\u0131c\u0131 Uyumlulu\u011fu Eksiklikleri<\/h3>\n<p>CSS d\u00fcnyas\u0131 s\u00fcrekli geli\u015fiyor ve yeni \u00f6zellikler (\u00f6rne\u011fin, <code>:has()<\/code> se\u00e7icisi, Container Queries) taray\u0131c\u0131larda farkl\u0131 h\u0131zlarda destekleniyor. E\u011fer projenizin geni\u015f bir taray\u0131c\u0131 yelpazesinde (\u00f6zellikle eski taray\u0131c\u0131larda) m\u00fckemmel uyumluluk sa\u011flamas\u0131 gerekiyorsa, CSS-Only yakla\u015f\u0131m\u0131 s\u0131n\u0131rlay\u0131c\u0131 olabilir. Yeni CSS \u00f6zelliklerine a\u015f\u0131r\u0131 ba\u011f\u0131ml\u0131l\u0131k, daha eski taray\u0131c\u0131larda bile\u015fenlerin d\u00fczg\u00fcn \u00e7al\u0131\u015fmamas\u0131na neden olabilir. Bu durumda, ya fallback (geri d\u00f6n\u00fc\u015f) stratejileri geli\u015ftirmeli ya da daha geni\u015f uyumlulu\u011fa sahip JavaScript tabanl\u0131 \u00e7\u00f6z\u00fcmlere y\u00f6nelmelisiniz.<\/p>\n<h3>Bak\u0131m Zorluklar\u0131 (\u00c7ok Karma\u015f\u0131k CSS Se\u00e7iciler)<\/h3>\n<p>CSS-Only bile\u015fenler, basit olduklar\u0131 s\u00fcrece bak\u0131m\u0131 kolayd\u0131r. Ancak, JavaScript&#8217;in eksikli\u011fini gidermek i\u00e7in a\u015f\u0131r\u0131 karma\u015f\u0131k ve i\u00e7 i\u00e7e ge\u00e7mi\u015f CSS se\u00e7icileri kullanmaya ba\u015flarsan\u0131z, kodunuz h\u0131zla anla\u015f\u0131lmaz ve bak\u0131m\u0131 zor hale gelebilir. Uzun, spesifik se\u00e7iciler, stil \u00e7ak\u0131\u015fmalar\u0131na yol a\u00e7abilir ve yeni geli\u015ftiricilerin bile\u015fenin nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlamas\u0131n\u0131 zorla\u015ft\u0131rabilir. Bu durum, &#8220;CSS-Only&#8221; yakla\u015f\u0131m\u0131n\u0131n getirdi\u011fi basitlik avantaj\u0131n\u0131 ortadan kald\u0131rabilir.<\/p>\n<h3>Ne Zaman Ger\u00e7ek Web Components Tercih Edilmeli?<\/h3>\n<p>E\u011fer bir bile\u015fenin ger\u00e7ekten g\u00fc\u00e7l\u00fc bir kaps\u00fcllemeye (Shadow DOM ile), ya\u015fam d\u00f6ng\u00fcs\u00fc y\u00f6netimine (lifecycle callbacks) ve JavaScript tabanl\u0131 dinamik etkile\u015fimlere ihtiyac\u0131 varsa, ger\u00e7ek Web Components (Custom Elements, Shadow DOM, HTML Templates) en iyi \u00e7\u00f6z\u00fcmd\u00fcr. Web Components, taray\u0131c\u0131 taraf\u0131ndan yerel olarak desteklenen standartla\u015ft\u0131r\u0131lm\u0131\u015f bir API seti sunar ve JavaScript framework&#8217;lerinden ba\u011f\u0131ms\u0131z, yeniden kullan\u0131labilir bile\u015fenler olu\u015fturmak i\u00e7in tasarlanm\u0131\u015ft\u0131r. Bu, \u00f6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli uygulamalarda veya farkl\u0131 projelerde tekrar tekrar kullan\u0131lacak karma\u015f\u0131k UI k\u00fct\u00fcphaneleri olu\u015ftururken tercih edilmelidir.<\/p>\n<p>\u00d6zetle, CSS-Only Custom Elements, basit, statik veya temel etkile\u015fimlere sahip UI bile\u015fenleri i\u00e7in m\u00fckemmel bir se\u00e7imdir. Performans\u0131 art\u0131r\u0131r, geli\u015ftirme s\u00fcrecini basitle\u015ftirir ve JavaScript ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n\u0131 azalt\u0131r. Ancak, karma\u015f\u0131k etkile\u015fimler, dinamik i\u00e7erik manip\u00fclasyonu, d\u0131\u015f veri entegrasyonu veya geni\u015f taray\u0131c\u0131 deste\u011fi gerektiren senaryolarda, JavaScript tabanl\u0131 \u00e7\u00f6z\u00fcmlere veya Web Components API&#8217;sine ba\u015fvurmak daha uygun ve verimli olacakt\u0131r. Do\u011fru arac\u0131 do\u011fru i\u015f i\u00e7in kullanmak, ba\u015far\u0131l\u0131 bir web geli\u015ftirme projesinin anahtar\u0131d\u0131r.<\/p>\n<h2>Sonu\u00e7: Gelece\u011fin Web Geli\u015ftirme Yakla\u015f\u0131mlar\u0131na Bir Bak\u0131\u015f<\/h2>\n<p>Bu makale boyunca, CSS-Only Custom Elements kavram\u0131n\u0131, temel prensiplerini, avantajlar\u0131n\u0131, uygulama \u00f6rneklerini ve s\u0131n\u0131rlar\u0131n\u0131 detayl\u0131 bir \u015fekilde inceledik. Modern web geli\u015ftirmenin s\u00fcrekli evrilen do\u011fas\u0131nda, performans, basitlik ve s\u00fcrd\u00fcr\u00fclebilirlik her zamankinden daha \u00f6nemli hale gelmi\u015ftir. CSS-Only yakla\u015f\u0131m\u0131, tam da bu ihtiya\u00e7lara cevap veren, ak\u0131ll\u0131ca ve yarat\u0131c\u0131 bir \u00e7\u00f6z\u00fcm sunmaktad\u0131r.<\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi, HTML&#8217;in semantik g\u00fcc\u00fc ile CSS&#8217;in geli\u015fmi\u015f d\u00fczen, se\u00e7ici ve de\u011fi\u015fken yeteneklerini bir araya getirerek, JavaScript&#8217;in karma\u015f\u0131kl\u0131\u011f\u0131na girmeden etkile\u015fimli ve yeniden kullan\u0131labilir UI bile\u015fenleri olu\u015fturmak m\u00fcmk\u00fcnd\u00fcr. <code>display: contents<\/code>, CSS de\u011fi\u015fkenleri, pseudo-elementler ve geli\u015fmi\u015f se\u00e7iciler gibi \u00f6zellikler, bu &#8220;yaln\u0131zca CSS&#8221; felsefesinin temel ta\u015flar\u0131n\u0131 olu\u015fturur. Basit bir uyar\u0131 mesaj\u0131ndan, daha karma\u015f\u0131k bir sekme men\u00fcs\u00fcne kadar bir\u00e7ok bile\u015feni bu y\u00f6ntemle hayata ge\u00e7irebildik. Bu, web sitelerimizin daha h\u0131zl\u0131 y\u00fcklenmesine, daha az JavaScript ba\u011f\u0131ml\u0131l\u0131\u011f\u0131na sahip olmas\u0131na ve potansiyel olarak daha kolay bak\u0131m\u0131na olanak tan\u0131r.<\/p>\n<p>Ancak, her arac\u0131n oldu\u011fu gibi, CSS-Only Custom Elements&#8217;in de s\u0131n\u0131rlar\u0131 vard\u0131r. Karma\u015f\u0131k etkile\u015fimler, dinamik DOM manip\u00fclasyonu veya d\u0131\u015f API entegrasyonu gibi senaryolarda JavaScript&#8217;in vazge\u00e7ilmez oldu\u011funu unutmamak gerekir. \u00d6nemli olan, projenizin ihtiya\u00e7lar\u0131na en uygun arac\u0131 se\u00e7ebilmek ve teknolojileri bilin\u00e7li bir \u015fekilde birle\u015ftirebilmektir. Bu yakla\u015f\u0131m, JavaScript&#8217;i tamamen ortadan kald\u0131rmak yerine, onu ger\u00e7ekten ihtiya\u00e7 duyulan yerlerde kullanmaya te\u015fvik ederken, daha hafif ve performansl\u0131 alternatifler sunar.<\/p>\n<p>Gelecekte, taray\u0131c\u0131lar\u0131n CSS \u00f6zelliklerine y\u00f6nelik deste\u011fi artt\u0131k\u00e7a ve yeni CSS mod\u00fclleri ortaya \u00e7\u0131kt\u0131k\u00e7a, CSS-Only Custom Elements&#8217;in potansiyeli daha da geni\u015fleyecektir. Geli\u015ftiriciler olarak, bu yeni yakla\u015f\u0131mlar\u0131 ke\u015ffetmek, denemek ve projelerimize entegre etmek, hem kendi becerilerimizi geli\u015ftirmemize hem de daha iyi, daha h\u0131zl\u0131 ve daha eri\u015filebilir web deneyimleri sunmam\u0131za yard\u0131mc\u0131 olacakt\u0131r. Web&#8217;in gelece\u011fi, ak\u0131ll\u0131 teknoloji se\u00e7imi ve yarat\u0131c\u0131 problem \u00e7\u00f6zme yetene\u011fimizde yat\u0131yor.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<ol>\n<li>\n<h4>CSS-Only Custom Elements ger\u00e7ek Web Component (web bile\u015feni) midir?<\/h4>\n<p>Hay\u0131r, ger\u00e7ek Web Components, <code>customElements.define()<\/code> gibi JavaScript API&#8217;lerini kullanarak taray\u0131c\u0131ya yeni bir HTML etiketi tan\u0131mlayan standartla\u015ft\u0131r\u0131lm\u0131\u015f bile\u015fenlerdir. CSS-Only Custom Elements ise JavaScript kullanmadan, mevcut HTML ve CSS \u00f6zelliklerini yarat\u0131c\u0131 bir \u015fekilde kullanarak Web Components benzeri bir kaps\u00fclleme ve yeniden kullan\u0131labilirlik hissi yarat\u0131r. Bunlar taray\u0131c\u0131 taraf\u0131ndan yerel olarak bir &#8220;Custom Element&#8221; olarak tan\u0131nmazlar.<\/p>\n<\/li>\n<li>\n<h4>Bu yakla\u015f\u0131m\u0131n en b\u00fcy\u00fck avantaj\u0131 nedir?<\/h4>\n<p>En b\u00fcy\u00fck avantaj\u0131, performanst\u0131r. JavaScript&#8217;e ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 ortadan kald\u0131rd\u0131\u011f\u0131 veya b\u00fcy\u00fck \u00f6l\u00e7\u00fcde azaltt\u0131\u011f\u0131 i\u00e7in, sayfalar daha h\u0131zl\u0131 y\u00fcklenir, daha az kaynak t\u00fcketir ve genellikle daha ak\u0131c\u0131 bir kullan\u0131c\u0131 deneyimi sunar. Ayr\u0131ca geli\u015ftirme kolayl\u0131\u011f\u0131 ve bak\u0131m maliyetlerinin d\u00fc\u015f\u00fckl\u00fc\u011f\u00fc de \u00f6nemli avantajlard\u0131r.<\/p>\n<\/li>\n<li>\n<h4>CSS-Only Custom Elements hangi durumlarda kullan\u0131lmamal\u0131d\u0131r?<\/h4>\n<p>Karma\u015f\u0131k etkile\u015fimler, dinamik DOM manip\u00fclasyonu (eleman ekleme\/\u00e7\u0131karma), d\u0131\u015f API&#8217;lerle veri al\u0131\u015fveri\u015fi, karma\u015f\u0131k form do\u011frulama veya dinamik eri\u015filebilirlik (ARIA) g\u00fcncellemeleri gerektiren durumlarda bu yakla\u015f\u0131m yetersiz kal\u0131r. Bu gibi senaryolarda JavaScript tabanl\u0131 \u00e7\u00f6z\u00fcmler veya ger\u00e7ek Web Components tercih edilmelidir.<\/p>\n<\/li>\n<li>\n<h4><code>display: contents<\/code> \u00f6zelli\u011finin eri\u015filebilirlik \u00fczerindeki etkisi nedir?<\/h4>\n<p><code>display: contents<\/code>, eleman\u0131n kendisinin kutu modelini ortadan kald\u0131rd\u0131\u011f\u0131 i\u00e7in, baz\u0131 taray\u0131c\u0131larda ve ekran okuyucularda eleman\u0131n semantik anlam\u0131n\u0131 veya odaklanabilirli\u011fini etkileyebilir. \u00d6rne\u011fin, baz\u0131 durumlarda elemanlar\u0131n klavye ile odaklanamamas\u0131na neden olabilir. Bu nedenle, bu \u00f6zelli\u011fi kullan\u0131rken dikkatli olmak ve eri\u015filebilirlik testleri yapmak \u00f6nemlidir.<\/p>\n<\/li>\n<li>\n<h4>CSS de\u011fi\u015fkenleri (Custom Properties) bu yakla\u015f\u0131mda neden \u00f6nemlidir?<\/h4>\n<p>CSS de\u011fi\u015fkenleri, bile\u015fenlerin stilini dinamik ve kolayca \u00f6zelle\u015ftirilebilir hale getirdi\u011fi i\u00e7in kritik \u00f6neme sahiptir. Renkler, boyutlar, fontlar gibi \u00f6zellikleri merkezi bir yerden y\u00f6netmeyi ve farkl\u0131 temalar veya durumlar i\u00e7in kolayca de\u011fi\u015ftirmeyi m\u00fcmk\u00fcn k\u0131lar. Bu, bile\u015fenlerin daha mod\u00fcler ve esnek olmas\u0131n\u0131 sa\u011flar.<\/p>\n<\/li>\n<\/ol>\n<p>#WebGeli\u015ftirme #CSSOnly #CustomElements #Frontend #PerformansOptimizasyonu<\/p>\n<div class=\"github-example-link\"><strong>\u00d6rnek kod:<\/strong> <a href=\"https:\/\/github.com\/fatihsoysalcom\/css-only-custom-alert-component\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/fatihsoysalcom\/css-only-custom-alert-component<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"Modern web geli\u015ftirme d\u00fcnyas\u0131nda, yeniden kullan\u0131labilir ve kaps\u00fcllenmi\u015f kullan\u0131c\u0131 aray\u00fcz\u00fc (UI) bile\u015fenleri olu\u015fturmak, uygulamalar\u0131n h\u0131zla geli\u015ftirilmesi ve s\u00fcrd\u00fcr\u00fclebilirli\u011fi a\u00e7\u0131s\u0131ndan hayati \u00f6nem ta\u015f\u0131r.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[126],"tags":[],"class_list":{"0":"post-44820","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-css3-html5","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Web Bile\u015fenleri D\u00fcnyas\u0131nda Yeni Bir Soluk: CSS-Only Custom Elements Nedir? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Web Bile\u015fenleri D\u00fcnyas\u0131nda Yeni Bir Soluk: CSS-Only Custom Elements Nedir?\" \/>\n<meta property=\"og:description\" content=\"Modern web geli\u015ftirme d\u00fcnyas\u0131nda, yeniden kullan\u0131labilir ve kaps\u00fcllenmi\u015f kullan\u0131c\u0131 aray\u00fcz\u00fc (UI) bile\u015fenleri olu\u015fturmak, uygulamalar\u0131n h\u0131zla geli\u015ftirilmesi ve s\u00fcrd\u00fcr\u00fclebilirli\u011fi a\u00e7\u0131s\u0131ndan hayati \u00f6nem ta\u015f\u0131r.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-21T18:06:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-21T18:06:59+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"34 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Web Bile\u015fenleri D\u00fcnyas\u0131nda Yeni Bir Soluk: CSS-Only Custom Elements Nedir?\",\"datePublished\":\"2026-09-21T18:06:34+00:00\",\"dateModified\":\"2026-09-21T18:06:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/\"},\"wordCount\":6293,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"CSS3 - HTML5\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/\",\"name\":\"Web Bile\u015fenleri D\u00fcnyas\u0131nda Yeni Bir Soluk: CSS-Only Custom Elements Nedir? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-09-21T18:06:34+00:00\",\"dateModified\":\"2026-09-21T18:06:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Web Bile\u015fenleri D\u00fcnyas\u0131nda Yeni Bir Soluk: CSS-Only Custom Elements Nedir?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Web Bile\u015fenleri D\u00fcnyas\u0131nda Yeni Bir Soluk: CSS-Only Custom Elements Nedir? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/","og_locale":"tr_TR","og_type":"article","og_title":"Web Bile\u015fenleri D\u00fcnyas\u0131nda Yeni Bir Soluk: CSS-Only Custom Elements Nedir?","og_description":"Modern web geli\u015ftirme d\u00fcnyas\u0131nda, yeniden kullan\u0131labilir ve kaps\u00fcllenmi\u015f kullan\u0131c\u0131 aray\u00fcz\u00fc (UI) bile\u015fenleri olu\u015fturmak, uygulamalar\u0131n h\u0131zla geli\u015ftirilmesi ve s\u00fcrd\u00fcr\u00fclebilirli\u011fi a\u00e7\u0131s\u0131ndan hayati \u00f6nem ta\u015f\u0131r.","og_url":"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-09-21T18:06:34+00:00","article_modified_time":"2026-09-21T18:06:59+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"34 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Web Bile\u015fenleri D\u00fcnyas\u0131nda Yeni Bir Soluk: CSS-Only Custom Elements Nedir?","datePublished":"2026-09-21T18:06:34+00:00","dateModified":"2026-09-21T18:06:59+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/"},"wordCount":6293,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["CSS3 - HTML5"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/","url":"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/","name":"Web Bile\u015fenleri D\u00fcnyas\u0131nda Yeni Bir Soluk: CSS-Only Custom Elements Nedir? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-09-21T18:06:34+00:00","dateModified":"2026-09-21T18:06:59+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/web-bilesenleri-dunyasinda-yeni-bir-soluk-css-only-custom-elements-nedir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Web Bile\u015fenleri D\u00fcnyas\u0131nda Yeni Bir Soluk: CSS-Only Custom Elements Nedir?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/44820","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=44820"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/44820\/revisions"}],"predecessor-version":[{"id":44821,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/44820\/revisions\/44821"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=44820"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=44820"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=44820"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}