+```
Burada;
-* `grid-x`: Grid sistemini x ekseninde başlatır.
-* `cell`: Her bir hücreyi tanımlar.
-* `small-12`: Mobilde 12 sütun kullan, tam genişlik ver anlamına geliyor.
-* `medium-6`: Masaüstünde 6 sütun, yani 2 sütunlu bir yapı anlamına geliyor.
+- `grid-x`: Grid sistemini x ekseninde başlatır.
+- `cell`: Her bir hücreyi tanımlar.
+- `small-12`: Mobilde 12 sütun kullan, tam genişlik ver anlamına geliyor.
+- `medium-6`: Masaüstünde 6 sütun, yani 2 sütunlu bir yapı anlamına geliyor.
Daha detaylı incelemek için [Foundation Framework Doc](https://get.foundation/sites/docs/index.html) sayfasından dökümantasyonu inceleyebilirsin.
@@ -53,7 +54,13 @@ Daha detaylı incelemek için [Foundation Framework Doc](https://get.foundation/
Eğer hemen başlamak istiyorsan:
-
+```
Ardından HTML dosyanda Foundation class’larını kullanmaya başlayabilirsin.
@@ -61,11 +68,15 @@ Ardından HTML dosyanda Foundation class’larını kullanmaya başlayabilirsin.
Daha kapsamlı projelerde `npm` ile kurulumunu öneririm:
+```bash
npm install foundation-sites
+```
Sonrasında:
+```bash
npx foundation new
+```
Bu komutla, sana temel bir Foundation projesi kurabilirsin.
@@ -77,53 +88,56 @@ Bu kısımda, Foundation’ın sunduğu **callout** bileşenini kullanarak **duy
Foundation’da duyuru, uyarı ya da önemli bilgileri vurgulamak için **callout** bileşeni kullanılabiliriz. **Callout** bileşeni, dikkat çekici bir stil sunarak mesajları öne çıkarır. Hadi hemen bir örnek üzerinden başlayalım:
-
-
-
-
+
+
+
+
+```
### Açıklamalar:
-* `**callout primary**`: `callout` bileşeni ile duyuru kutusunun stilini tanımlıyoruz. `primary` sınıfı ise kutunun rengini belirler (genellikle mavi tonlarında oluyor.).
+- `**callout primary**`: `callout` bileşeni ile duyuru kutusunun stilini tanımlıyoruz. `primary` sınıfı ise kutunun rengini belirler (genellikle mavi tonlarında oluyor.).
### Adım 2: Duyuru Kutusunu Responsive Yapma
Bu proje, mobil uyumlu bir duyuru kutusu oluşturmayı da içeriyor. Foundation, **grid sistemi** ve **responsive utilities** ile sayfanın farklı ekran boyutlarına göre nasıl uyumlu hale getirileceğini gayet kolaylaştırır.
-
Örneğin, duyuru kutusunun genişliğini ekran boyutuna göre değiştirebiliriz:
-
-
-
-
Yeni Özellik Duyurusu!
-
Web sitemizde yeni özellikler eklendi. Hızlıca göz atın ve denemek için tıklayın!
-
Özellikleri Keşfedin
-
-
+```html
+
+
+
+
Yeni Özellik Duyurusu!
+
Web sitemizde yeni özellikler eklendi. Hızlıca göz atın ve denemek için tıklayın!
+
Özellikleri Keşfedin
+
+
+```
### Açıklamalar:
-* `**grid-container**`: Container sınıfı, grid sisteminin düzenli çalışmasını sağlar.
-* `**grid-x grid-padding-x**`: `grid-x` tüm satırı tanımlar, `grid-padding-x` ise yatay boşluk ekler.
-* `**cell small-12 medium-8 large-6**`: Burada, duyuru kutusunun küçük ekranlarda tam genişlikte (12 sütun), orta boy ekranlarda 8 sütun ve büyük ekranlarda ise 6 sütun genişliğinde olmasını sağlıyoruz.
+- `**grid-container**`: Container sınıfı, grid sisteminin düzenli çalışmasını sağlar.
+- `**grid-x grid-padding-x**`: `grid-x` tüm satırı tanımlar, `grid-padding-x` ise yatay boşluk ekler.
+- `**cell small-12 medium-8 large-6**`: Burada, duyuru kutusunun küçük ekranlarda tam genişlikte (12 sütun), orta boy ekranlarda 8 sütun ve büyük ekranlarda ise 6 sütun genişliğinde olmasını sağlıyoruz.
Bu düzen sayesinde duyuru kutusu, ekran boyutuna göre daha rahat yerleşim alacak ve kullanıcının her cihazda düzgün görüntülenmesini sağlayacaktır.
@@ -133,45 +147,49 @@ Foundation, **temalar** ve **renkler** konusunda da özelleştirme imkanı sunar
Örneğin:
-
-
Önemli Uyarı!
-
Web sitemiz geçici olarak bakıma alındı. Lütfen daha sonra tekrar deneyin.
+```html
+
+
Önemli Uyarı!
+
Web sitemiz geçici olarak bakıma alındı. Lütfen daha sonra tekrar deneyin.
+```
-* `**alert**`: Bu sınıf, **kırmızı** bir arka plan rengini ifade eder ve genellikle uyarılar için kullanılır.
-* `**secondary**`: Duyuru kutusunun renk paletini değiştirir, farklı bir ton verir.
+- `**alert**`: Bu sınıf, **kırmızı** bir arka plan rengini ifade eder ve genellikle uyarılar için kullanılır.
+- `**secondary**`: Duyuru kutusunun renk paletini değiştirir, farklı bir ton verir.
### Adım 4: İnteraktif Özellikler Eklemek
Foundation ile basit **modal pencereler** ve **accordion** gibi interaktif özellikler de ekleyebilirsiniz. Örneğin, kullanıcı butona tıkladığında bir **modal pencere** açılmasını sağlayabiliriz:
-
-
Daha Fazla Bilgi
-
-
-
-
Detaylı Özellikler
-
Bu özellikler hakkında daha fazla bilgi almak için web sitemizi inceleyebilirsiniz.
-
- ×
-
-
-
-
-
+```html
+
+
Daha Fazla Bilgi
+
+
+
+
Detaylı Özellikler
+
Bu özellikler hakkında daha fazla bilgi almak için web sitemizi inceleyebilirsiniz.
+
+ ×
+
+
+
+
+
+```
Burada reveal sınıfını kullanarak bir modal pencere oluşturuyoruz. data-open özelliği ile, butona tıklandığında ilgili modal pencerenin açılmasını sağlıyoruz.
## 4\. Foundation Öğrenmek İçin İpuçları
-* **Resmi Dokümantasyon:** [https://get.foundation/](https://get.foundation/)
-* **Flexbox Kullanımı:** Flexbox ile düzenleme yapmayı öğrenmelesin, Foundation ile çok güçlü düzenler oluşturabilirsin.
-* **Proje Bileşenleri:** Formlar, butonlar, modal pencereler gibi bileşenleri kullanarak projeni hızlıca inşa et. Kendine bir tasarım, bir proje belirle ve onu foundation ile inşa et.
-* **Responsive Tasarımlar Yap:** Foundation’ın responsive özelliklerini keşfederek, sitenizin tüm cihazlarla uyumlu olmasını sağlayın. Ne kadar çok pratik yaparsanız o kadar hızlanır ve aşina olursunuz.
-* **Özelleştirme Yap:** Foundation’un css dosyalarını özelleştirerek, projene özel bir tema oluştur. Dosyaları kurcalamak foundation’ı çok daha iyi anlamana sebep olacaktır.
+- **Resmi Dokümantasyon:** [https://get.foundation/](https://get.foundation/)
+- **Flexbox Kullanımı:** Flexbox ile düzenleme yapmayı öğrenmelesin, Foundation ile çok güçlü düzenler oluşturabilirsin.
+- **Proje Bileşenleri:** Formlar, butonlar, modal pencereler gibi bileşenleri kullanarak projeni hızlıca inşa et. Kendine bir tasarım, bir proje belirle ve onu foundation ile inşa et.
+- **Responsive Tasarımlar Yap:** Foundation’ın responsive özelliklerini keşfederek, sitenizin tüm cihazlarla uyumlu olmasını sağlayın. Ne kadar çok pratik yaparsanız o kadar hızlanır ve aşina olursunuz.
+- **Özelleştirme Yap:** Foundation’un css dosyalarını özelleştirerek, projene özel bir tema oluştur. Dosyaları kurcalamak foundation’ı çok daha iyi anlamana sebep olacaktır.
## Kapanış
Bu bölümde Foundation’ın temel yapı taşlarını ve ilk bileşenlerini tanıdık.
-Bir sonraki yazımda **Bulma** ile tanışmaya gideceğiz. Benim favorilerimden biri kendisi. Daha fazla framework tanımak için takipte kalın, hoşçakalın.
\ No newline at end of file
+Bir sonraki yazımda **Bulma** ile tanışmaya gideceğiz. Benim favorilerimden biri kendisi. Daha fazla framework tanımak için takipte kalın, hoşçakalın.
diff --git a/content/blog/css-frameworkleri-tan-yoruz-3-b-l-m-bulma.md b/content/blog/css-frameworkleri-tan-yoruz-3-b-l-m-bulma.md
index a4c91c4..8b5415b 100644
--- a/content/blog/css-frameworkleri-tan-yoruz-3-b-l-m-bulma.md
+++ b/content/blog/css-frameworkleri-tan-yoruz-3-b-l-m-bulma.md
@@ -12,7 +12,6 @@ canonicalUrl: "https://medium.com/@poyrazavsever/css-frameworkleri-tan%C4%B1yoru
# CSS Frameworkleri Tanıyoruz | 3. Bölüm: Bulma
-

Bu seride amacımız, popüler CSS framework’lerini sade bir dille tanıtmak, nasıl kullanılacaklarını göstermek ve küçük projelerle öğrenmeyi desteklemek. İlk iki bölümde **Bootstrap** ve **Foundation** ile temel yapıları öğrendik. Şimdi sırada, sadeliği ve esnekliğiyle öne çıkan **Bulma** var. Açıkçası ben uzun zamandır **Bulma’yı** incelemek istiyordum. Bugüne nasip oldu.
@@ -33,23 +32,27 @@ Bulma’nın temel felsefesi, “**kodu anlamak kolay olmalı**” yaklaşımıd
Bulma’nın layout sistemi tamamen Flexbox üzerine kuruludur. Bu sayede hem yatay hem de dikey hizalama işlemleri oldukça esnektir. Karmaşık grid yapıları bile birkaç satır sınıf ile kolayca oluşturulabilir.
-
-
İçerik 1
-
İçerik 2
+```html
+
+```
### 1.2 - Kolay Öğrenilebilir Sınıf Sistemi
Sınıf isimleri açık ve anlamlıdır:
-* `is-primary`, `is-success`, `is-warning` gibi görsel sınıflar, bir bakışta ne işe yaradığını belli eder.
-* `has-text-centered`, `is-fullwidth`, `is-size-4` gibi yapılar, stil vermek için CSS yazmadan işleri halletmenizi sağlar.
+- `is-primary`, `is-success`, `is-warning` gibi görsel sınıflar, bir bakışta ne işe yaradığını belli eder.
+- `has-text-centered`, `is-fullwidth`, `is-size-4` gibi yapılar, stil vermek için CSS yazmadan işleri halletmenizi sağlar.
### 1.3 - Responsive Tasarımlarda Büyük Kolaylık
Mobil öncelikli yaklaşımı benimseyen Bulma, farklı ekran boyutları için özelleştirme yapmayı oldukça kolaylaştırır. Örneğin:
-
+```html
+
+```
Bu yapı, mobilde tam genişlik, tablette yarım, masaüstünde üçte bir genişlik anlamına gelir.
@@ -71,24 +74,33 @@ Bulma’yı en hızlı şekilde projene dahil etmek için **CDN** (Content Deliv
İhtiyacın olan tek şey HTML dosyanıza şu satırı eklemek:
-
+```html
+
+```
### 2.2- npm ile Kurulum
Projenin bir Node.js tabanlı yapısı varsa, npm ile Bulma’yı projenize dahil edebilirsin. Bu, özellikle projeyi daha profesyonel şekilde yönetmek isteyenler için iyi bir seçenek. Adımlar:
-
1 — Projende npm’i başlat:
+```bash
npm init -y
+```
2 — Bulma’yı kur:
+```bash
npm install bulma
+```
3 — `node_modules` klasöründen Bulma stil dosyasını projene import et:
-@import 'node\_modules/bulma/css/bulma.min.css';
+@import 'node_modules/bulma/css/bulma.min.css';
Bu yöntemle, projenin gereksinimlerine göre daha esnek bir kurulum yapmış olursun. Ayrıca, Bulma’nın özelleştirilmiş sürümleri için Sass kullanabilirsin.
@@ -98,7 +110,7 @@ Bulma, Sass ile özelleştirilebilirsin. Özellikle tasarımın bazı kısımlar
1- Sass dosyasını import et:
-@import 'node\_modules/bulma/bulma';
+@import 'node_modules/bulma/bulma';
2- Bulma’nın sunduğu değişkenleri ve mixin’leri kullanarak renk, yazı tipi, buton boyutları gibi tasarım öğelerini özelleştirebilirsin. Örneğin:
@@ -116,94 +128,96 @@ Bu projede, temel HTML yapısını kullanarak Bulma framework’ü ile şık bir
Öncelikle, temel HTML yapısını oluşturalım. Bulma’nın sunduğu `hero` sınıfını kullanarak bir başlık bölümü ekleyeceğiz ve altında birkaç kart bileşeni olacak.
-
-
-
-
-
-
Bulma Landing Page
-
-
-
-
-
-
-
-
-
- Hoş Geldiniz
-
-
- Bulma ile Basit Bir Landing Page Tasarımı
-
-
-
-
-
-
-
-
-
-
-
-
-
Özellik 1
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
-
-
-
-
-
-
-
Özellik 2
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
-
-
-
-
-
-
-
Özellik 3
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
-
-
-
-
-
-
-
-
-
-
-
+```html
+
+
+
+
+
+
Bulma Landing Page
+
+
+
+
+
+
+
+
+
+ Hoş Geldiniz
+
+
+ Bulma ile Basit Bir Landing Page Tasarımı
+
+
+
+
+
+
+
+
+
+
+
+
+
Özellik 1
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+
+
+
+
+
+
+
Özellik 2
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+
+
+
+
+
+
+
Özellik 3
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+
+
+
+
+
+
+
+
+
+
+
+```
### 2\. Açıklamalar
-* **Hero Section**: Bulma’nın `hero` sınıfı ile ekranın tamamını kaplayan bir başlık bölümümüz var. Burada `is-primary` sınıfı, başlık kısmına ana renk tonunu verir
-* **Feature Section**: Bu bölümde üç adet kart kullanıyoruz. Her kart, bir özellik tanıtımı yapacak şekilde tasarlandı. `columns` sınıfı ile kartları hizalıyoruz.
-* **Footer Section**: Sayfanın alt kısmında, sayfa hakkında kısa bir bilgi veren basit bir footer bulunuyor.
+- **Hero Section**: Bulma’nın `hero` sınıfı ile ekranın tamamını kaplayan bir başlık bölümümüz var. Burada `is-primary` sınıfı, başlık kısmına ana renk tonunu verir
+- **Feature Section**: Bu bölümde üç adet kart kullanıyoruz. Her kart, bir özellik tanıtımı yapacak şekilde tasarlandı. `columns` sınıfı ile kartları hizalıyoruz.
+- **Footer Section**: Sayfanın alt kısmında, sayfa hakkında kısa bir bilgi veren basit bir footer bulunuyor.
### 3\. CSS Özelleştirmeleri (isteğe bağlı)
Eğer özelleştirmek istersen, Bulma’nın sunduğu renkleri veya tasarım ögelerini değiştirebilirsin. Örneğin, `hero` kısmının rengini değiştirebilir veya kartların stilini özelleştirebilirsin.
-
+```html
+
+```
### 4\. Responsive Tasarım
Bulma, mobil öncelikli tasarım sunar. Bu nedenle tasarım, mobil cihazlarda düzgün bir şekilde görüntülenir. `columns` sınıfı ve `is-multiline` sayesinde, ekran boyutuna göre kartlar düzgün bir şekilde yerleşir. Küçük ekranlarda her kart bir satıra düşer, büyük ekranlarda ise yan yana yer alırlar.
-

-

## Sonuç
@@ -212,5 +226,5 @@ Bu projede, Bulma’nın **kolay kullanımı**, **responsive özellikleri** ve *
### Daha İleri Gitmek İçin
-* Bulma’nın **belgelerini** ([bulma.io](https://www.bulma.io)) inceleyerek daha fazla bileşen ve özelleştirme hakkında bilgi edinebilirsin.
-* Bulma’yı projende Sass ile kullanarak stil dosyalarını daha detaylı şekilde yönetebilirsin.
\ No newline at end of file
+- Bulma’nın **belgelerini** ([bulma.io](https://www.bulma.io)) inceleyerek daha fazla bileşen ve özelleştirme hakkında bilgi edinebilirsin.
+- Bulma’yı projende Sass ile kullanarak stil dosyalarını daha detaylı şekilde yönetebilirsin.
diff --git a/content/blog/css-frameworkleri-tan-yoruz-4-b-l-m-chakra-ui.md b/content/blog/css-frameworkleri-tan-yoruz-4-b-l-m-chakra-ui.md
index 6e18843..62dba88 100644
--- a/content/blog/css-frameworkleri-tan-yoruz-4-b-l-m-chakra-ui.md
+++ b/content/blog/css-frameworkleri-tan-yoruz-4-b-l-m-chakra-ui.md
@@ -38,18 +38,26 @@ Chakra UI, yalnızca **React** projeleriyle çalışır. Bu nedenle, öncelikle
### 2.1. React projesi oluştur (Vite ile öneriyorum)
+```bash
npm create vite@latest my\-chakra-app -- --template react
+```
cd my\-chakra-app
+```bash
npm install
+```
veya
+```bash
npx create-react-app my\-chakra-app
+```
cd my\-chakra-app
### 2.2. Chakra UI’yi yükle
+```bash
npm install @chakra-ui/react @emotion/react @emotion/styled framer-motion
+```
Burada yüklediğimiz framer-motion doc ‘da zorunlu koşulmuyor fakat tavsiye ediyorum.
@@ -57,28 +65,34 @@ Burada yüklediğimiz framer-motion doc ‘da zorunlu koşulmuyor fakat tavsiye
`main.jsx` (veya `index.js`) dosyanı şu şekilde güncelle:
+```ts
import React from 'react'
import ReactDOM from 'react-dom/client'
import { ChakraProvider } from '@chakra-ui/react'
import App from './App'
+```
ReactDOM.createRoot(document.getElementById('root')).render(
+```html
+```
)
### Artık hazırsın!
Chakra UI bileşenlerini kullanmaya başlayabilirsin. Örnek:
+```tsx
import { Button } from '@chakra-ui/react'
function MyButton() {
return Merhaba Chakra!
}
+```
Bunun çalışıp çalışmadığını kontrol et. Eğer çalışıyorsa sağlıklı bir şekilde yüklemişsindir.
@@ -89,7 +103,9 @@ Bu küçük projede, Chakra UI bileşenleriyle şık ve responsive bir **profil
* `Box`, `Image`, `Text`, `Stack`, `Button`, `Flex`, `Avatar`
* Chakra UI’nin **temaya dayalı renk sistemi** ve **spacing sistemini** kullanacağız.
+```ts
import {
+```
Box,
Flex,
Avatar,
@@ -99,10 +115,12 @@ import {
useColorModeValue,
} from "@chakra-ui/react";
+```tsx
function ProfileCard() {
return (
+```html
Ayşe Yılmaz
@@ -129,13 +148,18 @@ function ProfileCard() {
);
+```
}
+```ts
export default ProfileCard;
+```
### 1\. `Flex`
+```html
+```
Sayfanın tamamında kartı **ortalamak** için kullanılıyoruz.
@@ -146,6 +170,7 @@ Sayfanın tamamında kartı **ortalamak** için kullanılıyoruz.
### 2\. `Box`
+```html
+```
Tüm profil kartının çerçevesini oluşturuyor bu eleman. Atr ‘ları ise:
@@ -167,7 +193,9 @@ Tüm profil kartının çerçevesini oluşturuyor bu eleman. Atr ‘ları ise:
### 3\. `Avatar`
+```html
+```
Adından da anlaşılacağı üzere kullanıcının fotoğrafını gösteriyor.
@@ -177,6 +205,7 @@ Adından da anlaşılacağı üzere kullanıcının fotoğrafını gösteriyor.
### 4\. `Stack` + `Button`
+```html
Takip Et
@@ -185,6 +214,7 @@ Adından da anlaşılacağı üzere kullanıcının fotoğrafını gösteriyor.
Mesaj Gönder
+```
`Stack`: Chakra’nın **dikey veya yatay sıralama** komponentidir.
diff --git a/content/blog/css-frameworkleri-tan-yoruz-5-b-l-m-materialize.md b/content/blog/css-frameworkleri-tan-yoruz-5-b-l-m-materialize.md
index dc76e3b..cc5cc27 100644
--- a/content/blog/css-frameworkleri-tan-yoruz-5-b-l-m-materialize.md
+++ b/content/blog/css-frameworkleri-tan-yoruz-5-b-l-m-materialize.md
@@ -42,10 +42,12 @@ Materialize, sadece şık görünüm sunmakla kalmaz; aynı zamanda geliştirici
Materialize, 12 sütunlu, esnek ve mobil uyumlu bir grid sistemi sunar. Bu yapı sayesinde sayfa düzenleri kolayca planlanabilir ve responsive tasarımlar rahatlıkla oluşturulabilir.
+```html
+```
## 2\. Hazır UI Bileşenleri
@@ -79,7 +81,9 @@ Bunlar sadece HTML yapısıyla değil, JS üzerinden de kolayca yönetilebilir.
Materialize, Google’ın Material Icons kütüphanesini doğal olarak destekler. Böylece ekstra bir ikon kütüphanesi aramadan projene kolayca ikon ekleyebilirsin.
+```html
home
+```
Materialize’ın sunduğu bu temel özellikler, hızlı ve etkileyici kullanıcı arayüzleri geliştirmek isteyenler için büyük kolaylık sağlar. Özellikle yeni başlayanlar için kurulum ve kullanım açısından oldukça kullanıcı dostudur.
@@ -91,11 +95,13 @@ Materialize’ı projene entegre etmek oldukça basit. İster hızlıca denemek
Sadece birkaç satır HTML koduyla Materialize’ı projenize entegre edebilirsiniz:
+```html
+```
Bu yöntem, özellikle küçük çaplı projeler ve hızlı prototipleme için oldukça idealdir.
@@ -103,16 +109,22 @@ Bu yöntem, özellikle küçük çaplı projeler ve hızlı prototipleme için o
Daha profesyonel bir yapı kurmak istersen, Materialize’ı NPM aracılığıyla kurabilirsin:
+```bash
npm install materialize-css
+```
Ardından `import` komutlarıyla projenin ilgili dosyalarında kullanabilirsin:
+```ts
import "materialize-css/dist/css/materialize.min.css";
import "materialize-css/dist/js/materialize.min.js";
+```
### Örnek Kullanım
+```html
Tıkla
+```
Materialize’ın `waves-effect` sınıfı sayesinde butona tıklama efekti otomatik olarak eklenir. Küçük ama etkili detaylar ile kullanıcı deneyimi artırılır.
@@ -128,10 +140,12 @@ Materialize CSS’in güçlü yönlerinden biri, sade yapısı ve örneklerle h
Responsive tasarımlar için kullanılan sütun yapısı oldukça esnektir:
+```html
+```
* `s6` sınıfı, küçük ekranlarda 12 sütunluk yapının yarısını kaplayacak şekilde ayarlanır.
* `row` sınıfı satır başlatır, `col` ise sütunu temsil eder.
@@ -140,23 +154,28 @@ Responsive tasarımlar için kullanılan sütun yapısı oldukça esnektir:
Kullanıcıya içerik sunmak için oldukça şık bir bileşen:
+```html
Başlık
Bu bir kart açıklamasıdır.
+```
## Butonlar
Basit ama şık butonlar tek satırda oluşturulabilir:
+```html
Tıkla
+```
`waves-effect` ve `waves-light` sınıfları sayesinde tıklama animasyonu eklenir.
## Modal
+```html
Aç
@@ -167,6 +186,7 @@ Basit ama şık butonlar tek satırda oluşturulabilir:
Bu bir modal içeriktir.
+```
Modal’ın çalışması için JS dosyalarının yüklü olması ve `M.Modal.init()` ile başlatılması gerekir.
diff --git a/content/blog/docker-nedir-kahveni-al-docker-konu-uyoruz.md b/content/blog/docker-nedir-kahveni-al-docker-konu-uyoruz.md
index 2bfe054..d7799d2 100644
--- a/content/blog/docker-nedir-kahveni-al-docker-konu-uyoruz.md
+++ b/content/blog/docker-nedir-kahveni-al-docker-konu-uyoruz.md
@@ -82,13 +82,17 @@ Teori güzel, ama pratik olmadan biraz anlamsız kalıyor her şey. Şimdi Docke
İlk adım olarak sisteminde Docker kurulu mu kontrol et. Terminal veya komut satırına şu komutu yaz:
+```bash
docker \--version
+```
Eğer kurulu değilse [aha da buradan](https://www.docker.com/products/docker-desktop/) Docker Desktop’u indirip yükleyebilirsin. Kurulum sonrası bilgisayarı yeniden başlatmak gerekebilir.
### 2\. İlk Docker Komutu: Hello World
+```bash
docker run hello-world
+```
Bu ne yapar dersen:
@@ -123,11 +127,15 @@ CMD \["python", "app.py"\]
Terminale şunu yaz:
+```bash
docker build -t merhaba-dunya .
+```
Uygulamayı çalıştır:
+```bash
docker run merhaba-dunya
+```
Ve boom! Terminalde şunu göreceksin:
diff --git a/content/blog/frontend-testing-ara-lar-jest-ve-cypress-ile-ba-lamak.md b/content/blog/frontend-testing-ara-lar-jest-ve-cypress-ile-ba-lamak.md
index 57a6a69..2c7e0c7 100644
--- a/content/blog/frontend-testing-ara-lar-jest-ve-cypress-ile-ba-lamak.md
+++ b/content/blog/frontend-testing-ara-lar-jest-ve-cypress-ile-ba-lamak.md
@@ -31,13 +31,17 @@ Peki, Jest’i ne zaman kullanmalısın? Eğer React componentleri üzerinde ça
Kurulum ise oldukça basit. Tek bir komutla Jest’i projene ekleyebilirsin:
+```bash
npm install \--save-dev jest
+```
Kurulumdan sonra, Jest’i kullanmaya başlamak için birkaç temel ayar yapman yeterli. Şimdi, basit bir test örneğiyle devam edelim.
+```ts
function toplama(a, b) {
return a + b;
}
+```
Bu fonksiyonu test etmek için Jest ile şöyle bir test yazabilirsin:
@@ -74,12 +78,16 @@ Bazen test ettiğin kod, dış bağımlılıklara (örneğin, API isteklerine) i
jest.mock('axios'); // axios kütüphanesini mockladık
it('API çağrısı başarılı olursa veriyi döndürmeli', async () => {
+```ts
const veriler = { data: { isim: 'Ali' } };
+```
axios.get.mockResolvedValue(veriler); // Mock cevap
+```ts
const cevap = await apiCagir(); // Api istek atıyoruz
expect(cevap.isim).toBe('Ali');
});
+```
## Snapshot Testing
@@ -88,6 +96,7 @@ Snapshot testing, bileşenlerinin görsel çıktılarının kaydedilmesi ve daha
Bir bileşeni snapshot ile test etmek için, şu şekilde yazabilirsin:
+```tsx
import { render } from '@testing-library/react';
import MyComponent from './MyComponent';
@@ -95,6 +104,7 @@ test('MyComponent snapshot testi', () => {
const { asFragment } = render(
);
expect(asFragment()).toMatchSnapshot(); // Componentin çıktısını kaydediyor
});
+```
## Cypress Nedir?
@@ -107,7 +117,9 @@ Cypress ile test yazmak oldukça keyifli, çünkü her şey anlık geri bildirim
Cypress’i projene eklemek de oldukça basit. Tek bir komutla kurulumunu gerçekleştirebilirsin:
+```bash
npm install cypress \--save-dev
+```
Kurulumdan sonra, `npx cypress open` komutunu çalıştırarak Cypress arayüzünü açabilirsin. Buradan test senaryolarını kolayca yazmaya başlayabilirsin.
diff --git a/content/blog/next-js-15-gelmi-neler-de-i-ti-peki.md b/content/blog/next-js-15-gelmi-neler-de-i-ti-peki.md
index 1c5a0b6..cf49bc1 100644
--- a/content/blog/next-js-15-gelmi-neler-de-i-ti-peki.md
+++ b/content/blog/next-js-15-gelmi-neler-de-i-ti-peki.md
@@ -66,7 +66,9 @@ Aşağıdaki API’ler artık asenkron çalışıyor:
Bu API’leri kullanırken `await` yazman şart. Yani şöyle şeyler artık gerekiyor:
+```ts
const cookies = await cookies()
+```
## Nereleri etkiliyor?
@@ -83,7 +85,9 @@ Yani bu dosyaların içinde yukarıdaki API’leri kullanıyorsan hepsini async
Neyse ki Next.js ekibi bizi unutmamış ve bu geçişi kolaylaştırmak için bir araç sunmuş:
+```bash
npx @next/codemod@latest async\-request\-apis
+```
Bu komut sayesinde projenin içindeki eski kullanım biçimleriniz otomatik olarak async hale getirilebiliyor. Yine de kodu gözden geçirmek şart, çünkü her proje özelinde ufak dokunuşlar gerekebilir.
@@ -107,7 +111,9 @@ Bu durum, bazı projeler için performans düşüşüne neden olabilir. Ama mera
Eğer bir verinin cache’lenmesini ve static hale gelmesini istiyorsan artık bunu **açıkça belirtmen gerekiyor**.
+```ts
export const dynamic = 'force-static'
+```
veya daha esnek bir yapı istersen, `next.config.js` dosyasına aşağıdaki gibi bir ayar da ekleyebilirsin:
@@ -174,7 +180,9 @@ Next.js projeni yeni sürüme geçirirken en büyük yardımcın olacak araç bu
Kullanımı çok basit:
+```bash
npx @next/codemod@latest async\-request\-apis
+```
Sadece async dönüşümü değil, başka dönüşümler için de bu aracı kullanabilirsin. Kod tabanını hızlıca yeni sürüme uygun hale getiriyor.
@@ -215,11 +223,15 @@ Bu dosya, uygulamanın sunucu tarafında gerçekleşen istekleri izlemeni ve ger
* Hata loglama sistemleri (örn: request bazlı loglama)
// instrumentation.ts
+```ts
export function register() {
+```
console.log('Server started')
}
+```ts
export function onRequestError(error) {
+```
console.error('Request error:', error)
}
diff --git a/content/blog/next-js-ile-edge-functions-h-zl-web-uygulamalar-nas-l-geli-tirilir.md b/content/blog/next-js-ile-edge-functions-h-zl-web-uygulamalar-nas-l-geli-tirilir.md
index d46a4c6..10bcded 100644
--- a/content/blog/next-js-ile-edge-functions-h-zl-web-uygulamalar-nas-l-geli-tirilir.md
+++ b/content/blog/next-js-ile-edge-functions-h-zl-web-uygulamalar-nas-l-geli-tirilir.md
@@ -55,12 +55,14 @@ Bu yaklaşım şu avantajları sağlar:
* **Daha iyi kullanıcı deneyimi:** Sayfalar ve API yanıtları daha hızlı yüklenir.
* **Global ölçeklenebilirlik:** Dünyanın her yerindeki kullanıcılar benzer hızda erişim sağlar.
+```ts
export const runtime = 'edge';
export async function GET(req: Request) {
const country = req.headers.get('x-vercel-ip-country') || 'US';
return new Response(
+```
JSON.stringify({ currency: country === 'TR' ? '₺' : '$' }),
{ headers: { 'Content-Type': 'application/json' } }
);
@@ -79,10 +81,12 @@ Next.js, Edge Functions kullanmayı son derece kolay hale getiriyor sağ olsun.
Örnek olarak `app/api/hello/route.ts` dosyası oluşturalım:
+```ts
export const runtime = 'edge';
export async function GET() {
return new Response(
+```
JSON.stringify({ message: 'Merhaba Edge!' }),
{ headers: { 'Content-Type': 'application/json' } }
);
@@ -100,6 +104,7 @@ Next.js middleware yapısı **varsayılan olarak edge üzerinde çalışır.**
Örneğin kullanıcıyı oturum durumuna göre yönlendirmek için:
// middleware.ts
+```ts
import { NextResponse } from 'next/server';
export function middleware(req: Request) {
@@ -109,6 +114,7 @@ export function middleware(req: Request) {
}
return NextResponse.next();
}
+```
Bu middleware, kullanıcıya en yakın edge node’da çalışır, bu sayede yönlendirmeler çok daha hızlıdır.
@@ -130,6 +136,7 @@ Burada amaç kullanıcının ülkesi veya şehri bazında anında içerik/pref s
_Örnek (app/api/prefs/route.ts):_
+```ts
export const runtime = 'edge';
export async function GET(req: Request) {
@@ -139,6 +146,7 @@ export async function GET(req: Request) {
headers: { 'Content-Type': 'application/json' }
});
}
+```
Bu kod ile Türkiye’den gelen kullanıcı **₺** görürken, ABD’den gelen kullanıcı **$** görecektir.
@@ -146,6 +154,7 @@ Bu kod ile Türkiye’den gelen kullanıcı **₺** görürken, ABD’den gelen
Amacımız yeni bir özelliği kullanıcıların belirli bir yüzdesine göstermek. Mesela bir şeyi test etmek istiyor ya da bölge bazlı özellik geliştirmek istiyor olabilirsiniz.
+```ts
import { NextResponse } from 'next/server';
export const config = { matcher: \['/'\] };
@@ -155,9 +164,12 @@ export function middleware(req: Request) {
const variant = /variant=(A|B)/.exec(cookie)?.\[1\] || (Math.random() < 0.5 ? 'A' : 'B');
const res = NextResponse.next();
+```
res.headers.append('Set-Cookie', \`variant=${variant}; Path=/; Max-Age=2592000; SameSite=Lax\`);
+```ts
return res;
}
+```
Bu örnek kullanıcıya A veya B varyantını atar ve tüm isteklerde tutarlı kalmasını sağlar.
@@ -165,6 +177,7 @@ Bu örnek kullanıcıya A veya B varyantını atar ve tüm isteklerde tutarlı k
Burada ise amacımız yeni özellikleri %10 / %50 gibi kademelerle yayına almak. Yukarıdaki ile benzer sebeplerden bunu yapmak istiyor olabilirsiniz.
+```ts
export const runtime = 'edge';
export async function GET() {
@@ -173,6 +186,7 @@ export async function GET() {
headers: { 'Content-Type': 'application/json' }
});
}
+```
Gerçekte kullanıcı kimliğine göre hash alırsan, aynı kullanıcı her zaman aynı sonucu görür.
@@ -180,6 +194,7 @@ Gerçekte kullanıcı kimliğine göre hash alırsan, aynı kullanıcı her zama
Okuma ağırlıklı API’leri CDN üzerinde önbelleğe almak için bu tarz bir ihtiyacınız olabilir.
+```ts
export const runtime = 'edge';
export async function GET() {
@@ -191,6 +206,7 @@ export async function GET() {
}
});
}
+```
Bu sayede kullanıcılar her istekte milisaniyeler içinde yanıt alır.
diff --git a/content/blog/react-ile-dinamik-bir-kullan-c-profil-sayfas-nas-l-tasarlan-r.md b/content/blog/react-ile-dinamik-bir-kullan-c-profil-sayfas-nas-l-tasarlan-r.md
index a753f97..8275d9c 100644
--- a/content/blog/react-ile-dinamik-bir-kullan-c-profil-sayfas-nas-l-tasarlan-r.md
+++ b/content/blog/react-ile-dinamik-bir-kullan-c-profil-sayfas-nas-l-tasarlan-r.md
@@ -79,11 +79,13 @@ src/
* Bir `data.js` dosyası oluşturarak mock veriler eklemek:
+```ts
export cocst userData = {
name: "Poyraz Avsever",
bio: "Yazılım geliştirici ve Tasarımcı",
photo: "/images/profile.jpg",
education: \[
+```
{ id: 1, degree: "Yazılım Mühendisliği", institution: "OSTİM Teknik Üniversitesi" },
\],
products: \[{ id: 1, name: "CRM Yazılımı", price: "$100" }\],
@@ -99,6 +101,7 @@ export cocst userData = {
### 4.1. ProfileHeader.jsx
+```tsx
const ProfileHeader = ({ name, bio, photo }) => (
@@ -107,9 +110,11 @@ const ProfileHeader = ({ name, bio, photo }) => (
);
export default ProfileHeader;
+```
### 4.2. Dinamik Liste Bileşeni: ProductsList.jsx
+```tsx
const ProductsList = ({ products }) => (
{products.map(product => (
@@ -121,11 +126,13 @@ const ProductsList = ({ products }) => (
);
export default ProductsList;
+```
## 5\. Veri Çekme ve Kullanıcı Arayüzünü Tamamlama
* **useEffect** ile veri çekme:
+```ts
import { useState, useEffect } from "react";
import axios from "axios";
@@ -133,6 +140,7 @@ const \[data, setData\] = useState(null);
useEffect(() => {
axios.get("/api/user").then(response => setData(response.data));
+```
}, \[\])
* **Props Drilling** veya **Context API** kullanarak verilerin bileşenlere aktarımı.
diff --git a/content/blog/rss-ile-bilgi-ak-n-algoritmadan-uzakla-t-r.md b/content/blog/rss-ile-bilgi-ak-n-algoritmadan-uzakla-t-r.md
index 29832f9..b2d4b75 100644
--- a/content/blog/rss-ile-bilgi-ak-n-algoritmadan-uzakla-t-r.md
+++ b/content/blog/rss-ile-bilgi-ak-n-algoritmadan-uzakla-t-r.md
@@ -88,6 +88,7 @@ Aşağıdaki kategorilerden birini seçmen çoğu kullanıcı için yeterlidir.
Bir blog yazılarını programatik olarak RSS’e dökmek istersen, en yalın şablon aşağıdaki gibidir. (RSS 2.0 örneği)
+```xml
Ornek Blog
@@ -104,6 +105,7 @@ Bir blog yazılarını programatik olarak RSS’e dökmek istersen, en yalın ş
+```
### **Üretim seçenekleri:**
@@ -119,6 +121,7 @@ Aşağıdaki iskelet, birkaç feed’i okuyup son 7 günün başlıklarını top
// package.json: rss-parser ve nodemailer ekleyin
// npm i - pnpm add - yarn i rss-parser nodemailer
+```ts
const Parser = require('rss-parser');
const nodemailer = require('nodemailer');
const parser = new Parser();
@@ -126,8 +129,10 @@ const parser = new Parser();
const FEEDS = \[
'https://ornek.site/rss.xml',
'https://baska.site/feed'
+```
\];
+```ts
async function fetchItemsLast7Days() {
const now = new Date();
const weekAgo = new Date(now.getTime() - 7\*24\*60\*60\*1000);
@@ -138,12 +143,14 @@ async function fetchItemsLast7Days() {
for (const item of feed.items) {
const d = new Date(item.isoDate || item.pubDate || 0);
if (d >= weekAgo) {
+```
items.push({ title: item.title, link: item.link, date: d, source: feed.title });
}
}
}
// Tarihe göre yeni → eski
+```tsx
return items.sort((a, b) => b.date - a.date);
}
@@ -173,6 +180,7 @@ function renderHtml(items){
const html = renderHtml(items);
if (items.length) await sendEmail(html);
})();
+```
> P_oyraz’ın İpucusu: Bunu bir zamanlayıcıyla (cron, GitHub Actions, serverless scheduler) haftada 1 kez tetikle._
diff --git a/content/blog/svelte-ile-i-lk-ad-mlar-react-ve-vueya-kar-h-zl-m.md b/content/blog/svelte-ile-i-lk-ad-mlar-react-ve-vueya-kar-h-zl-m.md
index 434ec50..b7915a7 100644
--- a/content/blog/svelte-ile-i-lk-ad-mlar-react-ve-vueya-kar-h-zl-m.md
+++ b/content/blog/svelte-ile-i-lk-ad-mlar-react-ve-vueya-kar-h-zl-m.md
@@ -50,6 +50,7 @@ Svelte, özellikle performansın kritik olduğu projelerde (örneğin düşük p
React’ta bir bileşen oluşturmak ve state yönetmek için genellikle `useState` hook'u kullanılır. İşte basit bir sayaç bileşeni örneği:
// React'ta sayaç bileşeni
+```tsx
import React, { useState } from 'react';
function Counter() {
const \[count, setCount\] = useState(0);
@@ -57,12 +58,17 @@ return (
Count: {count}
setCount(count + 1)}>
+```
Increase
+```html
+```
);
}
+```ts
export default Counter;
+```
Burada React’in `useState` hook'u ile state yönetimi sağlanır. `onClick` olayında state güncellenir ve bileşen yeniden render edilir. Peki bunu svelte ile nasıl yapıyoruz?
@@ -70,6 +76,7 @@ Burada React’in `useState` hook'u ile state yönetimi sağlanır. `onClick` ol
Svelte’de aynı işlevselliği elde etmek çok daha basit ve doğrudan olur. State yönetimi doğrudan JavaScript değişkenleri üzerinden yapılır ve Svelte reaktif yapısı sayesinde değişiklikler otomatik olarak bileşenleri yeniden render eder:
+```html
@@ -79,6 +86,7 @@ Svelte’de aynı işlevselliği elde etmek çok daha basit ve doğrudan olur. S
Increase
+```
Bu daha büyük projelerde dez avantaj yaratabilir fakat küçük çaplı projelerde sürecin hızlanmasına olanak tanır.
@@ -89,6 +97,7 @@ Bu daha büyük projelerde dez avantaj yaratabilir fakat küçük çaplı projel
React’ta bir bileşene `props` geçirerek veri aktarımı şu şekilde yapılır:
// React'ta parent bileşen
+```tsx
import React from 'react';
import Greeting from './Greeting';
@@ -97,13 +106,16 @@ function App() {
}
export default App;
+```
// React'ta child bileşen
+```tsx
function Greeting({ name }) {
return
Hello, {name}!
;
}
export default Greeting;
+```
Burada `Greeting` bileşenine `props` olarak `name` değerini geçiyoruz ve bu props'u child bileşende kullanıyoruz.
@@ -111,6 +123,7 @@ Burada `Greeting` bileşenine `props` olarak `name` değerini geçiyoruz ve bu p
Svelte’de props kullanımı ise daha basit ve doğrudandır:
+```html
@@ -120,6 +133,7 @@ Svelte’de props kullanımı ise daha basit ve doğrudandır:
Hello, {name}!
+```
Svelte’de bir değişkeni `export` ederek dışarıdan bileşene veri aktarılabilir. Bu, React'taki `props` yapısına karşılık gelir ve çok daha sade bir kullanım sunar. Aslında yine aynı yere varıyoruz. Daha komplike projelerde tercih edilmeyebilir.
@@ -129,6 +143,7 @@ Svelte’de bir değişkeni `export` ederek dışarıdan bileşene veri aktarıl
React’ta formlarda state yönetimi ve event handling biraz daha karmaşık olabilir:
+```tsx
import React, { useState } from 'react';
function Form() {
@@ -147,6 +162,7 @@ function Form() {
}
export default Form;
+```
Her input değişikliğinde state güncellenir ve render tetiklenir.
@@ -154,12 +170,14 @@ Her input değişikliğinde state güncellenir ve render tetiklenir.
Svelte’de form kontrolü ve event yönetimi ise çok daha basit:
+```html
+```
Svelte’de `bind` ifadesi ile bir input elemanını doğrudan bir değişkene bağlayabilirsiniz. Bu, iki yönlü veri bağlamayı (two-way binding) çok basit hale getirir. Gelin burada ki ana mantığı anladığımıza göre biraz daha Svelte’e odaklanalım ve Svelte’in özelliklerini daha derinlemesine inceleyelim.
@@ -176,20 +194,26 @@ Svelte’de lifecycle metotları, bileşenlerin yaşam döngüsü içinde belirl
Svelte’de bir bileşenin DOM’a eklenmesiyle birlikte yapılacak işlemleri `onMount` fonksiyonu ile tanımlayabilirsiniz:
+```html
+```html
{#if data}
{data.title}
{/if}
+```
Bu örnekte `onMount`, bileşen DOM’a yerleştiği anda bir API çağrısı yapar ve sonuçları ekranda görüntüler.
@@ -202,15 +226,19 @@ Svelte’de reaktiviteyi tetiklemek için sadece bir değişkenin değerini gün
**Reaktif İfadeler:**
+```html
+```html
Count: {count}
Doubled: {doubled}
count++}>Increase
+```
Bu örnekte, `count` değişkeni her arttığında `doubled` reaktif olarak güncellenir ve bu değişiklik ekrana yansır.
@@ -225,16 +253,22 @@ Svelte, küçük projeler için bileşenler arası veri paylaşımı amacıyla o
Writable store, bileşenler arasında güncellenebilir bir veri paylaşımı sağlar. Aşağıda bir sayaç uygulaması için writable store kullanımını görebilirsiniz:
+```html
+```
+```ts
import { writable } from 'svelte/store';
export const count = writable(0);
+```
+```html
Count: {$count}
count.update(n => n + 1)}>Increase
+```
Store değerine erişmek için `$` işaretini kullanarak reaktif bir bağlama yapabilirsiniz. Ayrıca, `count.update()` ile store değerini güncelleyebilirsiniz. Gördüğünüz gibi oldukça basit.
diff --git a/content/blog/tailwind-css-ile-tasar-m-s-recini-nas-l-h-zland-rabilirsiniz.md b/content/blog/tailwind-css-ile-tasar-m-s-recini-nas-l-h-zland-rabilirsiniz.md
index 51006a3..50f9a26 100644
--- a/content/blog/tailwind-css-ile-tasar-m-s-recini-nas-l-h-zland-rabilirsiniz.md
+++ b/content/blog/tailwind-css-ile-tasar-m-s-recini-nas-l-h-zland-rabilirsiniz.md
@@ -35,7 +35,9 @@ CSS de her yeni stil için bir class yazman gerekiyor. Örneğin, bir butonun ar
Tailwind de ise aynı butonu şu şekilde oluşturabilirsin:
+```html
Click Me h
+```
Yani, her şey HTML içerisinde çok daha hızlı bir şekilde yönetilebiliyor. Bu da stili hızlıca oluşturmanı ve üzerinde anında değişiklik yapmanı sağlıyor. Üstelik terimler daha basite indirgendiği için kafa karışıklığından da kurtuluyoruz.
@@ -46,9 +48,11 @@ CSS’de büyük projelerde zamanla stil dosyaları karmaşık hale gelebilir. S
**3- Responsive Tasarım Kolaylığı**
CSS de her ekran boyutu için ayrı media query yazman gerekiyor fakat Tailwind’de bu iş çok daha kolay. Örneğin:
+```html
Responsive Metin
+```
Bu kod, küçük ekranlarda `text-sm`, orta ekranlarda `text-lg`, büyük ekranlarda `text-xl` sınıflarını uygular. Media query yazmaya gerek yok. Bana kalırsa Tailwind’in sağladığı en büyük avantajlardan birisi de bu.
@@ -102,9 +106,11 @@ module.exports = {
Tailwind ile responsive tasarımlar oluşturmak çok basittir. Sınıfların başına `sm:`, `md:`, `lg:` gibi prefix'ler ekleyerek farklı ekran boyutlarına göre stilleri kolayca tanımlayabilirsin. Bu, mobil uyumluluğu hızla sağlamanın en etkili yollarından biri. Web sitesini tasarlamaya başlarken mobil versiyonlardan başlarsan daha rahat edersin. **Küçükten büyüğe**
+```html
Responsive Metin
+```
6\. **Tailwind Eklentilerini Keşfet**
diff --git a/content/blog/three-js-3-boyutlu-d-nyaya-merhaba.md b/content/blog/three-js-3-boyutlu-d-nyaya-merhaba.md
index 371850b..295ef0e 100644
--- a/content/blog/three-js-3-boyutlu-d-nyaya-merhaba.md
+++ b/content/blog/three-js-3-boyutlu-d-nyaya-merhaba.md
@@ -35,7 +35,9 @@ Three.js, **JavaScript ile tarayıcı üzerinde 3D grafikler oluşturmak için k
Three.js, bir sahne (scene) oluşturmanıza olanak tanır. Sahne, 3D dünyanızı barındıran bir konteyner gibidir. İçine nesneler, ışıklar ve kameralar ekleyebilirsiniz.
+```ts
const scene = new THREE.Scene();
+```
### 2\. Kameralar
@@ -44,16 +46,20 @@ Kameralar, 3D sahnenizi “görmeyi” sağlar. Three.js’de iki ana kamera tü
* **PerspectiveCamera**: İnsan gözünün görme şekline benzer. Uzak nesneler daha küçük görünür.
* **OrthographicCamera**: Nesneler uzaklıklarına göre boyut değiştirmez. Teknik çizimler için kullanışlıdır.
+```ts
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
+```
camera.position.z = 5;
### 3\. Geometri ve Malzeme (Geometry & Material)
Geometri, 3D dünyanızdaki nesnelerin şekillerini tanımlar: küreler, kutular, düzlemler… Malzeme ise bu şekillerin nasıl görüneceğini belirler. Örneğin, mat mı parlak mı, hangi renkte olacak?
+```ts
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
+```
scene.add(cube);
### 4\. Işıklandırma (Lighting)
@@ -64,7 +70,9 @@ Işık, sahnenizi gerçekçi hale getirir. Three.js, çeşitli ışık türleri
* PointLight (Nokta ışığı)
* DirectionalLight (Güneş gibi yönlendirilmiş ışık)
+```ts
const light = new THREE.PointLight(0xffffff, 1, 100);
+```
light.position.set(10, 10, 10);
scene.add(light);
@@ -72,7 +80,9 @@ scene.add(light);
Renderer, sahnenizi tarayıcıda görüntülemenizi sağlar. Three.js’nin WebGLRenderer’ı, GPU’nun gücünü kullanarak sahneleri hızlı bir şekilde çizer.
+```ts
const renderer = new THREE.WebGLRenderer();
+```
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
@@ -80,8 +90,10 @@ document.body.appendChild(renderer.domElement);
Three.js ile sahnenizi canlandırabilirsiniz. Bu, genellikle bir **animasyon döngüsü** kullanılarak yapılır:
+```ts
function animate() {
requestAnimationFrame(animate);
+```
cube.rotation.x += 0.01;
cube.rotation.y += 0.01;
renderer.render(scene, camera);
@@ -97,30 +109,42 @@ animate();
### Gelin bir önreğe bakalım
+```ts
import \* as THREE from 'three';
+```
// Sahne oluştur
+```ts
const scene = new THREE.Scene();
+```
// Kamera ve ışık
+```ts
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
+```
camera.position.z = 5;
// Renderer
+```ts
const renderer = new THREE.WebGLRenderer();
+```
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Geometri ve malzeme
+```ts
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
+```
scene.add(cube);
// Animasyon
+```ts
function animate() {
requestAnimationFrame(animate);
+```
cube.rotation.x += 0.01;
cube.rotation.y += 0.01;
renderer.render(scene, camera);
diff --git a/content/blog/typescript-ile-javascriptten-tsx-e-ge-i-ki-isel-bir-deneyim.md b/content/blog/typescript-ile-javascriptten-tsx-e-ge-i-ki-isel-bir-deneyim.md
index ba02e82..789ecda 100644
--- a/content/blog/typescript-ile-javascriptten-tsx-e-ge-i-ki-isel-bir-deneyim.md
+++ b/content/blog/typescript-ile-javascriptten-tsx-e-ge-i-ki-isel-bir-deneyim.md
@@ -38,6 +38,7 @@ Gelin küçük bir karşılaştırma yapalım.
JSX, React bileşenlerinde JavaScript kodunu HTML benzeri bir sözdizimi ile yazmamıza olanak tanır. Ancak, JSX’te tip kontrolü yapılmıyor.
+```tsx
import React from 'react';
const Greeting = ({ name }) => {
@@ -45,14 +46,18 @@ const Greeting = ({ name }) => {
};
export default Greeting;
+```
## TSX (TypeScript XML)
TSX ise, JSX’in TypeScript ile birleştirilmiş hali olup, tip kontrolü ve daha iyi hata ayıklama özellikleri sunuyor. Tip güvenliği sağlıyor ve bu, bileşenlerin beklenmedik hatalara karşı korunmasına yardımcı oluyor.
+```ts
import React from 'react';
+```
// Props için TypeScript ile tip tanımlaması
+```tsx
interface GreetingProps {
name: string;
}
@@ -62,6 +67,7 @@ const Greeting: React.FC
= ({ name }) => {
};
export default Greeting;
+```
## Karşılaştırma