# Terrarium Projesi Bölüm 1: HTML'e Giriş ```mermaid journey title Your HTML Learning Journey section Foundation Create HTML file: 3: Student Add DOCTYPE: 4: Student Structure document: 5: Student section Content Add metadata: 4: Student Include images: 5: Student Organize layout: 5: Student section Semantics Use proper tags: 4: Student Enhance accessibility: 5: Student Build terrarium: 5: Student ``` ![HTML'e Giriş](../../../../translated_images/webdev101-html.4389c2067af68e98280c1bde52b6c6269f399eaae3659b7c846018d8a7b0bbd9.tr.png) > Sketchnote: [Tomomi Imura](https://twitter.com/girlie_mac) HTML, yani HyperText Markup Language, ziyaret ettiğiniz her web sitesinin temelini oluşturur. HTML'i web sayfalarına yapı kazandıran bir iskelet olarak düşünebilirsiniz – içeriklerin nereye gideceğini, nasıl organize edileceğini ve her bir parçanın neyi temsil ettiğini tanımlar. CSS daha sonra HTML'inizi renkler ve düzenlerle "süsler" ve JavaScript interaktivite ile "canlandırır", ancak HTML her şeyin mümkün olmasını sağlayan temel yapıyı sunar. Bu derste, sanal bir teraryum arayüzü için HTML yapısını oluşturacaksınız. Bu uygulamalı proje, temel HTML kavramlarını öğretirken görsel olarak ilgi çekici bir şey inşa etmenizi sağlayacak. İçeriği semantik öğelerle nasıl organize edeceğinizi, resimlerle nasıl çalışacağınızı ve interaktif bir web uygulaması için temel oluşturmayı öğreneceksiniz. Dersin sonunda, bitki resimlerini düzenli sütunlar halinde gösteren çalışan bir HTML sayfasına sahip olacaksınız ve bir sonraki derste stil eklemeye hazır olacaksınız. İlk başta basit görünüyorsa endişelenmeyin – CSS görsel cilayı eklemeden önce HTML tam olarak böyle görünmelidir. ```mermaid mindmap root((HTML Fundamentals)) Structure DOCTYPE Declaration HTML Element Head Section Body Content Elements Tags & Attributes Self-closing Tags Nested Elements Block vs Inline Content Text Elements Images Containers (div) Lists Semantics Meaningful Tags Accessibility Screen Readers SEO Benefits Best Practices Proper Nesting Valid Markup Descriptive Alt Text Organized Structure ``` ## Ders Öncesi Test [Ders öncesi test](https://ff-quizzes.netlify.app/web/quiz/15) > 📺 **İzle ve Öğren**: Bu faydalı video özetine göz atın > > [![HTML Temelleri Videosu](https://img.youtube.com/vi/1TvxJKBzhyQ/0.jpg)](https://www.youtube.com/watch?v=1TvxJKBzhyQ) ## Projenizi Kurma HTML koduna dalmadan önce, teraryum projeniz için uygun bir çalışma alanı oluşturalım. Başlangıçtan itibaren düzenli bir dosya yapısı oluşturmak, web geliştirme yolculuğunuz boyunca size iyi bir alışkanlık kazandıracaktır. ### Görev: Proje Yapınızı Oluşturun Teraryum projeniz için özel bir klasör oluşturacak ve ilk HTML dosyanızı ekleyeceksiniz. İşte kullanabileceğiniz iki yaklaşım: **Seçenek 1: Visual Studio Code Kullanarak** 1. Visual Studio Code'u açın 2. "File" → "Open Folder" seçeneğine tıklayın veya `Ctrl+K, Ctrl+O` (Windows/Linux) ya da `Cmd+K, Cmd+O` (Mac) kısayolunu kullanın 3. `terrarium` adında yeni bir klasör oluşturun ve seçin 4. Explorer panelinde "New File" simgesine tıklayın 5. Dosyanıza `index.html` adını verin ![VS Code Explorer'da yeni dosya oluşturma](../../../../translated_images/vs-code-index.e2986cf919471eb984a0afef231380c8b132b000635105f2397bd2754d1b689c.tr.png) **Seçenek 2: Terminal Komutlarını Kullanarak** ```bash mkdir terrarium cd terrarium touch index.html code index.html ``` **Bu komutların yaptığı şeyler:** - Projeniz için `terrarium` adında yeni bir dizin oluşturur - Teraryum dizinine geçiş yapar - Boş bir `index.html` dosyası oluşturur - Düzenleme için dosyayı Visual Studio Code'da açar > 💡 **İpucu**: Web geliştirmede `index.html` dosya adı özeldir. Birisi bir web sitesini ziyaret ettiğinde, tarayıcılar otomatik olarak `index.html` dosyasını varsayılan sayfa olarak görüntülemek için arar. Bu, `https://mysite.com/projects/` gibi bir URL'nin, dosya adını URL'de belirtmeye gerek kalmadan `projects` klasöründeki `index.html` dosyasını otomatik olarak sunacağı anlamına gelir. ## HTML Belge Yapısını Anlama Her HTML belgesi, tarayıcıların doğru bir şekilde anlaması ve görüntülemesi için belirli bir yapıyı takip eder. Bu yapıyı resmi bir mektup gibi düşünün – belirli bir sırada gerekli öğeler vardır ve bu öğeler alıcının (bu durumda tarayıcı) içeriği düzgün bir şekilde işlemesine yardımcı olur. ```mermaid flowchart TD A[""] --> B[""] B --> C[""] C --> D[""] C --> E["<meta charset>"] C --> F["<meta viewport>"] B --> G["<body>"] G --> H["<h1> Heading"] G --> I["<div> Containers"] G --> J["<img> Images"] style A fill:#e1f5fe style B fill:#f3e5f5 style C fill:#fff3e0 style G fill:#e8f5e8 ``` Her HTML belgesinin ihtiyaç duyduğu temel yapıyı ekleyerek başlayalım. ### DOCTYPE Bildirimi ve Kök Eleman Her HTML dosyasının ilk iki satırı, belgenin tarayıcıya "tanıtımı" olarak hizmet eder: ```html <!DOCTYPE html> <html></html> ``` **Bu kodun ne yaptığını anlamak:** - Belge türünü `<!DOCTYPE html>` kullanarak HTML5 olarak ilan eder - Tüm sayfa içeriğini barındıracak kök `<html>` öğesini oluşturur - Modern web standartlarını doğru tarayıcı işleme için belirler - Farklı tarayıcılar ve cihazlar arasında tutarlı bir görüntüleme sağlar > 💡 **VS Code İpucu**: VS Code'da herhangi bir HTML etiketinin üzerine geldiğinizde, MDN Web Docs'tan kullanım örnekleri ve tarayıcı uyumluluk detayları gibi faydalı bilgiler görebilirsiniz. > 📚 **Daha Fazla Bilgi Edinin**: DOCTYPE bildirimi, tarayıcıların çok eski web sitelerini desteklemek için kullanılan "quirks mode"a girmesini engeller. Modern web geliştirme, [standartlara uygun işleme](https://developer.mozilla.org/docs/Web/HTML/Quirks_Mode_and_Standards_Mode) sağlamak için basit `<!DOCTYPE html>` bildirimini kullanır. ### 🔄 **Pedagojik Kontrol** **Dur ve Düşün**: Devam etmeden önce şunları anladığınızdan emin olun: - ✅ Her HTML belgesinin neden bir DOCTYPE bildirimine ihtiyaç duyduğu - ✅ `<html>` kök öğesinin ne içerdiği - ✅ Bu yapının tarayıcıların sayfaları doğru bir şekilde işlemesine nasıl yardımcı olduğu **Hızlı Kendini Test Et**: "Standartlara uygun işleme"nin ne anlama geldiğini kendi kelimelerinizle açıklayabilir misiniz? ## Temel Belge Meta Verilerini Eklemek Bir HTML belgesinin `<head>` bölümü, tarayıcıların ve arama motorlarının ihtiyaç duyduğu ancak ziyaretçilerin doğrudan sayfada görmediği önemli bilgileri içerir. Bunu, web sayfanızın düzgün çalışmasını ve farklı cihazlar ve platformlar arasında doğru şekilde görünmesini sağlayan "sahne arkası" bilgileri olarak düşünün. Bu meta veriler, tarayıcılara sayfanızı nasıl görüntüleyeceğini, hangi karakter kodlamasını kullanacağını ve farklı ekran boyutlarını nasıl işleyeceğini söyler – profesyonel, erişilebilir web sayfaları oluşturmak için gerekli olan her şey. ### Görev: Belge Başlığını Ekleyin Açılış ve kapanış `<html>` etiketlerinizin arasına bu `<head>` bölümünü ekleyin: ```html <head> <title>Welcome to my Virtual Terrarium ``` **Her öğenin ne yaptığını açıklamak:** - Tarayıcı sekmelerinde ve arama sonuçlarında görünen sayfa başlığını ayarlar - Dünya çapında doğru metin görüntüleme için UTF-8 karakter kodlamasını belirtir - Modern Internet Explorer sürümleriyle uyumluluğu sağlar - Görüntüleme içeriğini doğal boyutta göstermek için başlangıç yakınlaştırma seviyesini ayarlar > 🤔 **Bunu Düşünün**: Eğer şu şekilde bir viewport meta etiketi ayarlarsanız: `` ne olurdu? Bu, sayfanın her zaman 600 piksel genişliğinde olmasını zorlar ve duyarlı tasarımı bozar! [Doğru viewport yapılandırması](https://developer.mozilla.org/docs/Web/HTML/Viewport_meta_tag) hakkında daha fazla bilgi edinin. ## Belge Gövdesini Oluşturmak Bir HTML belgesinin `` öğesi, web sayfanızın tüm görünen içeriğini – kullanıcıların göreceği ve etkileşimde bulunacağı her şeyi – içerir. `` bölümü tarayıcıya talimatlar verirken, `` bölümü gerçek içeriği içerir: metin, resimler, düğmeler ve kullanıcı arayüzünüzü oluşturan diğer öğeler. Haydi gövde yapısını ekleyelim ve HTML etiketlerinin anlamlı içerik oluşturmak için nasıl birlikte çalıştığını anlayalım. ### HTML Etiket Yapısını Anlama HTML, öğeleri tanımlamak için eşleştirilmiş etiketler kullanır. Çoğu etiket, `

` gibi bir açılış etiketi ve `

` gibi bir kapanış etiketi içerir ve arasında içerik bulunur: `

Merhaba, dünya!

`. Bu, "Merhaba, dünya!" metnini içeren bir paragraf öğesi oluşturur. ### Görev: Gövde Elemanını Ekleyin HTML dosyanızı `` öğesini içerecek şekilde güncelleyin: ```html Welcome to my Virtual Terrarium ``` **Bu tam yapı ne sağlar:** - Temel HTML5 belge çerçevesini oluşturur - Doğru tarayıcı işleme için gerekli meta verileri içerir - Görünen içeriğiniz için boş bir gövde oluşturur - Modern web geliştirme en iyi uygulamalarını takip eder Artık teraryumunuzun görünen öğelerini eklemeye hazırsınız. Farklı içerik bölümlerini organize etmek için `
` öğelerini konteyner olarak kullanacağız ve bitki resimlerini göstermek için `` öğelerini ekleyeceğiz. ### Resimlerle ve Düzen Konteynerleriyle Çalışmak Resimler HTML'de özeldir çünkü "kendini kapatan" etiketler kullanırlar. `

` gibi içerik etrafında sarılan öğelerden farklı olarak, `` etiketi, `src` gibi dosya yolu ve `alt` gibi erişilebilirlik bilgilerini içeren tüm bilgileri kendi içinde barındırır. Resimleri HTML'ye eklemeden önce, proje dosyalarınızı düzgün bir şekilde organize etmeniz gerekir. Bunun için bir `images` klasörü oluşturup bitki grafiklerini ekleyeceksiniz. **Önce resimlerinizi ayarlayın:** 1. Teraryum proje klasörünüzün içinde `images` adında bir klasör oluşturun 2. [çözüm klasöründen](../../../../3-terrarium/solution/images) bitki resimlerini indirin (toplamda 14 bitki resmi) 3. Tüm bitki resimlerini yeni `images` klasörünüze kopyalayın ### Görev: Bitki Görüntüleme Düzeni Oluşturun Şimdi `` etiketlerinizin arasına iki sütunda düzenlenmiş bitki resimlerini ekleyin: ```html
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
``` **Adım adım bu kodda neler oluyor:** - Tüm içeriği barındıracak `id="page"` ile bir ana sayfa konteyneri oluşturur - İki sütun konteyneri oluşturur: `left-container` ve `right-container` - Sol sütunda 7 bitki ve sağ sütunda 7 bitki düzenler - Her bitki resmini bireysel konumlandırma için bir `plant-holder` div içine sarar - Bir sonraki derste CSS stil uygulaması için tutarlı sınıf adları kullanır - Her bitki resmine JavaScript etkileşimi için benzersiz kimlikler atar - Resim klasörüne işaret eden doğru dosya yollarını içerir > 🤔 **Bunu Düşünün**: Tüm resimlerin şu anda "plant" şeklinde aynı alt metni olduğunu fark ettiniz mi? Bu erişilebilirlik için ideal değil. Ekran okuyucu kullanıcıları "bitki" kelimesini 14 kez tekrar tekrar duyacak ve her bir resmin hangi bitkiyi gösterdiğini bilemeyecek. Her resim için daha iyi, daha açıklayıcı alt metinler düşünebilir misiniz? > 📝 **HTML Eleman Türleri**: `
` öğeleri "blok düzeyinde"dir ve tam genişlik kaplar, `` öğeleri ise "satır içi"dir ve yalnızca gerekli genişliği kaplar. Tüm bu `
` etiketlerini `` etiketlerine değiştirirseniz ne olacağını düşünüyorsunuz? ### 🔄 **Pedagojik Kontrol** **Yapı Anlayışı**: HTML yapınızı gözden geçirmek için bir an durun: - ✅ Düzeninizdeki ana konteynerleri tanımlayabilir misiniz? - ✅ Her resmin neden benzersiz bir kimliğe sahip olduğunu anlıyor musunuz? - ✅ `plant-holder` divlerinin amacını nasıl tanımlarsınız? **Görsel İnceleme**: HTML dosyanızı bir tarayıcıda açın. Şunları görmelisiniz: - Basit bir bitki resimleri listesi - İki sütunda düzenlenmiş resimler - Basit, stil verilmemiş bir düzen **Unutmayın**: Bu sade görünüm, CSS stil eklenmeden önce HTML'in tam olarak nasıl görünmesi gerektiğidir! Bu işaretleme eklendiğinde, bitkiler ekranda görünecek, ancak henüz cilalı görünmeyecek – bunun için bir sonraki derste CSS kullanılacak! Şimdilik, içeriğinizi düzgün bir şekilde organize eden ve erişilebilirlik en iyi uygulamalarını takip eden sağlam bir HTML temeline sahipsiniz. ## Erişilebilirlik için Semantik HTML Kullanımı Semantik HTML, HTML öğelerini yalnızca görünümlerine göre değil, anlamlarına ve amaçlarına göre seçmek anlamına gelir. Semantik işaretleme kullandığınızda, içeriğinizin yapısını ve anlamını tarayıcılara, arama motorlarına ve ekran okuyucular gibi yardımcı teknolojilere iletiyorsunuz. ```mermaid flowchart TD A[Need to add content?] --> B{What type?} B -->|Main heading| C["

"] B -->|Subheading| D["

,

, etc."] B -->|Paragraph| E["

"] B -->|List| F["

    ,
      "] B -->|Navigation| G["