From 46684c2c8b80596fd1edc6c120989363717e11c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yusuf=20=C4=B0pek?= Date: Thu, 1 Jul 2021 01:24:40 +0300 Subject: [PATCH] add(article) added an article and changed styling --- articles/websitenize-tema-ekleme.md | 205 ++++++++++++++++++ data/pictures/websitenize-tema-ekleme-01.webp | Bin 0 -> 9698 bytes data/pictures/websitenize-tema-ekleme.webp | Bin 0 -> 5768 bytes data/style.css | 21 +- 4 files changed, 221 insertions(+), 5 deletions(-) create mode 100644 articles/websitenize-tema-ekleme.md create mode 100644 data/pictures/websitenize-tema-ekleme-01.webp create mode 100644 data/pictures/websitenize-tema-ekleme.webp diff --git a/articles/websitenize-tema-ekleme.md b/articles/websitenize-tema-ekleme.md new file mode 100644 index 0000000..677c9d6 --- /dev/null +++ b/articles/websitenize-tema-ekleme.md @@ -0,0 +1,205 @@ +# Websitenize Tema Ekleme +![websitenize-tema-ekleme](pictures/websitenize-tema-ekleme.webp) + +Karanlık temalara bayılıyorum. Kullandığım her websitesinde ve uygulamada karanlık tema tercih ediyorum. Peki tema seçeneklerini sitemize nasıl koyarız? Birden fazla temayı sitemizde nasıl yapabiliriz bu rehberde bunu anlatacağım. + +1. Ne yapacağız? +2. Düğmeyi oluşturma +3. Renk düzenlerini oluşturma +4. İşlevsellik +5. Kullanıcının tercihine göre temayı kaydetme +6. Kapanış +7. Katkıda bulunanlar + +## Ne Yapacağız? +Örnek olarak projelerimden birisini kullanacağım. Geçtiğimiz haftalarda 3 tane teması olan bir hesap makinesi yaptım. + +[kod](https://github.com/yusufipk/another-calculator) | [canlı demo](https://yusufipk.github.io/another-calculator/) + +![websitenize-tema-ekleme-01](pictures/websitenize-tema-ekleme-01.webp) + +Gördüğünüz gibi düğmemiz var ve bu düğmeyle 3 tema arasında seçim yapabiliyoruz. + +## Düğmeyi Oluşturma +Düğmeyi oluşturmak için checkbox, radio veya button elementlerini kullanabiliriz. Burada ben radi elementini kullanacağım. + +``` +
+ + + +
+``` + +## Renk Düzenlerini Oluşturma +Renk düzenlerini CSS değişkenlerini kullanarak oluşturacağız. SASS değişkenlerinin derlenmesi gerektiğinden SASS değişkenleri kullanamazsınız! Bu uygulamada ben üç tane tema yapıyorum dolayısıyla üç tane renk düzeni oluşturacağım. İlki; +``` + :root { + --color-main: #3b4664; + --color-white: #ffffff; + --bg-main: #181f32; + --bg-buttons: rgba(37, 45, 68, 0.6); + --num: #eae3db; + --number-color: #484b5a; + --number-border: #b3a599; + --button-secondary: #647299; + --border-secondary: #404d70; + --button-tertiary: #d13f30; + --border-tertiary: #922417; + --radio-color: #cf3f34; +} +``` +Bu varsayılan temam olacak dolayısıyla herhangi bir attribute eklememe gerek yok. İkinci temam; +``` +body[data-theme="light"] { + --color-main: #e6e6e6; + --color-white: #3a3a32; + --bg-main: #eeeeee; + --bg-buttons: #d3cdcd; + --num: #e5e4e0; + --number-color: #3a3a32; + --number-border: #a69c93; + --button-secondary: #388187; + --border-secondary: #1a5d66; + --button-tertiary: #c85401; + --border-tertiary: #873a02; +} +``` + +Bu aydınlık temamız olacak. data-theme yazarak bunu belirtmemiz gerekli. Data özel bir attribute. Data hakkında daha fazla bilgi almak istiyorsanız [buraya bakın.](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/data-*) + +Son temamızsa; +``` +body[data-theme="purple"] { + --color-main: #17062a; + --color-white: #ffe43b; + --bg-main: #1e0836; + --bg-buttons: #1e0836; + --num: #331b4d; + --number-color: #ffe537; + --number-border: #85219b; + --button-secondary: #56077c; + --border-secondary: #bf15f4; + --button-tertiary: #00decf; + --border-tertiary: #6dfaf1; + --radio-color: #00e8d8; +} +``` +Bu kurulumla birlikte değişkenlerimizi kodumuzda kullanıp istediğimiz temayı dinamik olarak sayfamızda değiştirebileceğiz. + +## İşlevselliği Ekliyoruz +İlk olarak radio elementlerimizi Javascript ile seçmemiz gerekli. +``` +const theme1 = document.getElementById("theme1"); +const theme2 = document.getElementById("theme2"); +const theme3 = document.getElementById("theme3"); +``` +Şimdi ``changeTheme()`` fonksiyonunu oluşturacağız. Bu fonksiyon body attribute değerini değiştirmemizi sağlayacak ve böylece istediğimiz temayı sitede kullanabileceğiz. + +``` +function changeTheme() { + if (theme1.checked) { + document.body.setAttribute("data-theme", ""); + } else if (theme2.checked) { + document.body.setAttribute("data-theme", "light"); + } else if (theme3.checked) { + document.body.setAttribute("data-theme", "purple"); + } else return; +} +``` +Şimdi de eventListener eklememiz lazım, yapmasını istediğimiz iki şey var; + +Radio elementine tıkladığımızda diğer bütün radio elementlerini uncheck haline getirmemiz lazım. +Her radio elementine tıkladığımızda changeTheme() fonksiyonunu çalıştırmamız lazım. +``` + theme1.addEventListener("click", () => { + theme2.checked = false; + theme3.checked = false; + changeTheme(); +}); +theme2.addEventListener("click", () => { + theme1.checked = false; + theme3.checked = false; + changeTheme(); +}); +theme3.addEventListener("click", () => { + theme1.checked =false; + theme2.checked = false; + changeTheme(); +}); +``` + +Bununla birlikte bütün temalarımız işlevesel bir şekilde çalışıyor! Kullanıcı hangi temaya tıklarsa site ona göre değişecek. + +Kullanıcının Tercihine Göre Temayı Kaydetme +İki sorunumuz var: + +1. Kodumuzda varsayılan tema yok. +2. Kullanıcının tercih ettiği temayı kaydetmiyoruz. Sayfa her yenilendiğinde tema eski haline dönüyor. + +Bu sorunu localStorage kullanarak aşacağız. + +İlk olarak varsayılan tema oluştralım. + +``` +// Varsayılan temam "theme1" olacak +if (localStorage.getItem("theme") === null) { + localStorage.setItem("theme", "theme1"); +} +``` + +Switch kullanarak her sayfayı yenilediğimizde seçilen temayı tekrar seçeceğiz. + +``` +switch (localStorage.getItem("theme")) { + case "theme1": + theme1.checked = true; + break; + case "theme2": + theme2.checked = true; + break; + case "theme3": + theme3.checked = true; + break; + default: + break; +} +``` +Daha sonrasında localStorage.setItem() kullanarak eventListener'larının kullanıcının seçtiği temayı localStorage'a kaydetmesini sağlayacağız. + +``` +theme1.addEventListener("click", () => { + theme2.checked = false; + theme3.checked = false; + // New Code + localStorage.setItem("theme", "theme1"); + changeTheme(); +}); +theme2.addEventListener("click", () => { + theme1.checked = false; + theme3.checked = false; + // New Code + localStorage.setItem("theme", "theme2"); + changeTheme(); +}); +theme3.addEventListener("click", () => { + theme1.checked = false; + theme2.checked = false; + // New Code + localStorage.setItem("theme", "theme3"); + changeTheme(); +}); +``` +Son olarak kodun sonunda ``changeTheme()`` fonksiyonunu çağırmamız gerekli ki her sayfayı yenilediğimizde rengimiz değişebilsin. + +Bu kadar! Websitemizde kullanıcının seçebileceği 3 tane temamız var ve localStrage kullanarak temayı kaydediyoruz. Sitenize bu yöntemle istediğiniz kadar tema ekleyebilirsiniz. + +## Kapanış +Kullanıcının tema tercihini de göz önünde bulundurmak istiyorsanız CSS'te olan [prefers-color-scheme](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme) media query'sini kullanarak varsayılan temayı karanlık/aydınlık olarak ayarlayabilirsiniz. Kolay bir işlem olduğundan bu rehberi daha fazla uzatmak istemiyorum. + +Benim ilk kodlama rehberimdi ve herhangi bir geri bildiriminiz varsa lütfen bana ulaşın! Okuduğunuz için teşekkürler ve umarım bu rehber size faydalı olmuştur. + +## Katkıda Bulunanlar +Yusuf İpek [website](https://yusufipek.me), [youtube](https://www.youtube.com/channel/UCVBX2n_5egE9XuJL8NUS0Xg) + +;tags: html css web-development diff --git a/data/pictures/websitenize-tema-ekleme-01.webp b/data/pictures/websitenize-tema-ekleme-01.webp new file mode 100644 index 0000000000000000000000000000000000000000..deede9216061a47167424c9a663990356820b792 GIT binary patch literal 9698 zcmd6KWl&yA*X4t|ySux)2MYvucXx;2?(PJ4cPF?92o3>)ySqOyx%1XH_kHK%R?V-O z>8jJ!b*j!jz4u6}b-S?UIwF^yu zqA8*Jx3=dAAN33&D<6Mu2JfY1xM!lrT8T+0fq+w<7r4dFS!(*nyNt+XOa%^r$O-5; zWFEADfu`_02vijuHLgGLU4SW=0ytqEeV!E{Xb~bAK^WPqw;`Ym6iMU%(I=46uh=F( z4L;uC0$!>V9V6@Pz$f*_|Jr-GzJy`62RZ6`7;%5(he_;#W$+OlP*N(T7hc&$jA8=( z<;_q63F0APM{$PH|7ZHSF0q8VO8i75V9A_yTlnE#!c>SE#Ex1mrl=4W-AiIKQw=U= z|4_gac{h`PRWP{1Z#>os^Tk2_e)=EwQtT-h_?ZJYMxs!$Y~Jd>FQ{>2xXV$K%s4kc zu7IXjdHmlUqO$7!u$h*xLr4WiE&r>ZTmV_M58FyOqVP8aEMEr`u&O>n0^2Ibzd@(+ zIGUNc;3M!r-l0+d4V}?@tbf3pR@A_Quzh6LFgCA^LwS#oUxQX#3R(8^#CN zRBwsgTKc!pm>P>pUjMeif5&zZE89S*_%2FS-o1YkYqqz@R)U8 zbpV36x|fl=iVfUD`>Rs4yd%uWz_24!9WDrWP!)t82safZ0=Hz<#7Dg}wzYhHm0rzP zDD^(ui;oV-FHeLIh^b6u&UGv-ga~`0n_AQ3T&{dI&=O&?_$?tmw#L!AWzwsET+7}2 zAyy%d=9g5Cugpv5Li;Uq%~huoC)VP!m8m3o@0A+zE|YNrQ?Y3i&W&SsR8LDo_^P^| zaTuK08xM35!WSh1%@W^DEQNup2iVw(A92d}m3Ph2t{wT$oKXDiF%CbeoHy2lg_Ty)WL(9D&1#`b1^IRn%kgj9M6?gAEQ~sPm#Vj zWoqIAp~raw9#%0U+*Bfu&;o+YQp@H(gK>Sb9YV+PtX1Ey3qiIyH|04O;uVnD?t6bZ z7wk1LWb*;PaxS(nb&%;jgp|%5T%&VbkEH33HLCmwH&oD=MpxispEa0Zy{J=kKsE(= zBx!>VG%vi-rBs{Gu4He(=cqmdha|CvuCeksdNiB-9#F)g3aJI8R#mf{`ZjiSDt-+72a!mTVtULp;C7YyG4)-W@ zo&kRJW67Fx-`pM2lgRnxctuDNr{sh)OLpr0Nm|>C2b0B= zd;BVWm*O?%r>NXR$!qziW|#goYD4i4O%o86x#`M+kG~h(CzT|%33&h*xZuCYX;#bq zS|>I;2BlHRqm>vV40)&i&EUfjfln*a8Iox=Q+_@zsg=iCPlb7krM~^GFtC^ox(!yE zKTs1q!8?pM!2a?G?BhD=T=5qFSns8<3>psTy`01(`TfZ@CvXgCRP~WT1GSMr8rFZ_57pBXDvL zxeS-vGGw5x37{J2En3$johtUN#+9Ot@G~X#SNN8uY1joWA!8e=GV3gQGx{E(?Y#41 z_J!xf)-zZ9Z-N}h^4qW4>_3(5nanx|ymwvBN1x%C>nIO$;>hy=0GY+Dlo_M&x)3z2?t#bb1cf)Wi>^QRJMA8m<6@C=pj0LfyZox7Rh0r#rrS`x2g z#W$+fTkw~vi_|0j9}pI8>lh*DRv5jzi{cqNra&CDoK@XlYd4{bfwXItL!J$fBX%$& z;pN_(3mFNZnR?~$?0DA1{^>o%M|R8KwtaQ=-Qm2-=kF(YS#B4vsoss(B?d9ziNQ&m zg>>0?;E$&>yz)RDt)Q#Ep(X+g>WzDzlQPqSXTjwR))jy5CC-gPHDiEE6F<4T5qry+ zhR&2FrG;8pN1$`*ECR=>zQ%Cc0x?~^z3iu0;ePr^wB7E+(!;#I@!py^gqS&ImxaG^ zH&)Ugv>;v>(8~(zW3EA(rtEWGgP2mva2nY6fkdoc9f`=S*S^Co5v8ereuwlZ&I~lS znwfR0M|fAe2*|D<_a6|q=ZpB}UX>>b*@?`!i6Uh6oaV(zhxljv)j6eG>>t+ydz?Y7 zBM#c^40!`eM+9c1w&32>d2K4n7uUX>>*ISkRV-32ty6#_r^&v<58C1HA++)sDie5I zx4q=ccDv~@c){nEa5Mwa<=2KO_>&bH%pFR2)b-(f)q;RT(B_82z-T4rFs|_--odaq z)VP@2SuZ<|-_AKS-qAXm@t`@nfhqdq*>JOjZBCobn<*#y0kKnKH(~o; z;a`V~<9icvPM_$r6aYY8$7vX)keRt71rF;X%6H3uAwbw56&tCFtkYk{XsCk4TmhG^ z3Nb+&xQ`*?44c65-O%o%piS`x06>gnIi*JClR}cs zhr!xI6#o2$!Q}wIICbJrh!BvK2rm+o>d3og2CeUIaB8)>feV#O2F+F=?FZrQd)P*>og29)AeMIn^Rn)49N$eotAh-zhz+@UbZrc93`AoSo2 zmYZ`_Tt7o+TbfCcE(270A}y^$bxTq$4qL)oWwJ3nAxrOwYkM2c2#d2YdC%#sd#DM4 z+n5Q)ZwKXS)X7)Jtl`?uO{y+7Kzkuds>n9f4u+zg#d(fa8eBZ7fWKEc$O1dW2(?i} zVx#aO#u*IOQf;DsLbe}>oQF#YRQUI84u}p8*_NIma9Iwn-l;MQrV%l}t|KYyC*8T4 z5!eI(03fr$?>(-VPPC}+zkovC!6x*9$&1c-&F?Ww%A9UI@8k7fTKTg#N&vx#Se{>$ z+71Xx`u7gcwkFR{a&kGe8y}jOzyJ2_c;A6$MWB(Tg~Ie? z#wYZj9M!GZGqj`a$sA7Gofyz!yf)m^of9b9ySc3-FTcd>elzk%!GD9GX zZn(x7xKsm`JOPB}@!5TuA=>HQI5`3CNh#{a2|f?xZzkoPo+7T~^f;Mlo*X}d>wq{Ctj(3-2u@p$u&>Iug#^WaGMfIOWvbXsIYZ%jpDsZVMdG{zoGK%J zfq8!e_3sd6^Q>VW_L|2yt-p}hKnzEN1vVr#;>4JOzoC^p^er7!^FA>Rc4H? zPwT!6Y~hN;<=POH9INK_ar_1V;Q9tnjGTzuq)VoQVFYZc?@dL^|-(?t(2ma6}h8VI6<_fCZxa-fKqj~oS0KO4q0VBW;=wL&QLLOm!x||_p!?GN@V~ttt52x?z@0&mWu7wN1h5bB$>x8T!M+BLLX?5VEjZDidAc3$q{K6wW^2k|{W5`J8s4^MF zxE-GL{gUeq1+KC)l}TNfYb5-*=8dp-gEg4;MQVCz`FB5dQ=XzYahtQ5c-_vL{#Y%L zx+3gxKbyTlYcWUS0aGyW|BWTl7LZwvx^xs3Y8gSno~`@sZs?$(WExs)Of? zMZBwWJ*@uu^n#c#&P^etby^vN}g-&h`p@mhfyK3%mP&#-b$N&Qr zS2ixe4u6^KRA@uq4(Z`bMXI>wDJ9I7tre#m+!!V@@d%DzY0uW>j1R(HxRM@7^D0o$ zfPj`Aoub4T4^Igg+Gl>DmO*o;6_b;;x@HRVppV{kj}HLAynb6{F5od$7zo-w{3M6y z=_{x$22(N6Q3Yi%ymH-WR(W-HDH|Kc3Oi4rwa&D7!*z9VoRVlD>qeWJHIFA${G%Ur zJCZoUG9bScakCy`7JPVc*02~Vz*esQYpo>1&m$Uvs0?xHVgf*;CVj1E)A6a9UX3mi zp!}2SITEc1FYwKbLC-k13KwwNQrIY+wQNN1gmF<=;^}#-{3q`7M0}p81&o0 zlLaxSS z_tnlhR9txqZ@$5VV zF(fN_*kMw>uSeaW`W3PRCBpaEGPij~S97q#reqEY(2lnpHz9{ha<&TUK$^mI=@_;p z%6&qu601vGVSAvyN^ZAaEaoaFu_u;$3i2U&@XI5qTF&*%PIN9)G_dqZBbnsv$885k ztcvFv3g_0jp#+!Jlg@M6hYy~05dwCULrMqE{vi$a{0N(jTg-2osI0oSQRwTO64#mz z>}Z0+MzM29$CIU>WNXCc(kwNeSjjXv=n8=k{GVmvyF3;)_$36Yp=aOMWt2cg)wQV; zKv8Zl^}hBPs+8(nHaZg!ejD9$IYJ;M1fdZE=D%c^UFcnU)v%ygW?sUQk*l#G3u z5!)O<|%vlHZ^$rIsc)wKXua!)rb$(sVC5^Sej*Elz9)*`hm>EjTSk`k{=->gJ$Tu(_MlWuLhdTI&+al62T`3;B`t}Lyyt@7T7j-&PrF&A^-Bgzna`Q- z{?8o_T+u$VIncXxc8Vi&I2>Aciz6%>-~V?#{#vk;me0#e;gm%(TP$YROFyd{+$^Lj&F=SxvFoY zy|{<=jna%aHSAb+yi4DOL-v>keFO4P&;}JPaoS32ct0~1 z6`nMh*X2X(Y}*mzv4$J7UVg=y*zBeqBXWSQA1f|*{UPEP|8`fLloj|kFnir~{JjeAV;vo zoNvn~>dv4A4ee9JB5e#Y?yu7f*Eiocm%eKkW9UqAY|J&i1vPLSW#+oCJj>pP)gn5O z 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 literal 0 HcmV?d00001 diff --git a/data/style.css b/data/style.css index 58dbe70..80da6db 100644 --- a/data/style.css +++ b/data/style.css @@ -4,7 +4,6 @@ body { max-width: 800px; margin: auto; padding: 0 16px; - margin-bottom: 500px; font-family: sans-serif; } @@ -16,6 +15,14 @@ a:visited { color: gray; } +ol > li { + margin-bottom: 0.5rem; +} + +ul > li { + margin-bottom: 0.5rem; +} + h1 { text-align: center; } @@ -29,15 +36,22 @@ footer { } img { + border-radius: 5px; max-width: 600px; width: 100%; margin: auto; display: block; } +pre { + border-radius: 4px; + background-color: #12161b; + padding: 0 0.3rem 1rem 1rem; +} + code { overflow-wrap: break-word; - color: lime; + color: white; } @media (prefers-color-scheme: light) { @@ -54,9 +68,6 @@ code { h2 { color: inherit; } - code { - color: forestgreen; - } } @media print {