مقدمة عن HTML
ما هي HTML؟
HTML (HyperText Markup Language) هي لغة ترميز تستخدم لبناء هيكل صفحات الويب. تم تطويرها في أوائل التسعينيات من قبل Tim Berners-Lee.
تاريخ HTML:
HTML 1.0 ظهرت في عام 1991، ثم HTML 2.0 في 1995، HTML 3.2 في 1997، HTML 4.01 في 1999، و HTML5 في 2014.
مميزات HTML:
- سهلة التعلم: لغة بسيطة وواضحة
- معيارية: معايير W3C
- متوافقة: تعمل على جميع المتصفحات
- قابلة للتوسع: يمكن دمجها مع CSS و JavaScript
مثال بسيط:
<!DOCTYPE html>
<html lang="ar">
<head>
<title>صفحتي الأولى</title>
</head>
<body>
<h1>مرحباً بالعالم!</h1>
<p>هذه أول صفحة HTML</p>
</body>
</html>
بنية صفحة HTML
البنية الأساسية:
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>عنوان الصفحة</title>
</head>
<body>
<!-- المحتوى هنا -->
</body>
</html>
شرح العناصر:
<!DOCTYPE html>: يحدد نوع المستند<html>: العنصر الجذر<head>: معلومات الصفحة<body>: محتوى الصفحة
الوسوم الأساسية
عناوين:
<h1>عنوان رئيسي</h1>
<h2>عنوان فرعي</h2>
<h3>عنوان أصغر</h3>
<h4>عنوان صغير</h4>
<h5>عنوان أصغر</h5>
<h6>أصغر عنوان</h6>
فقرة:
<p>هذه فقرة نصية</p>
<p>فقرة أخرى</p>
سطر جديد:
<p>سطر أول<br>سطر ثاني</p>
تنسيق النصوص
تنسيقات النص:
<strong>نص عريض</strong>
<em>نص مائل</em>
<mark>نص مميز</mark>
<small>نص صغير</small>
<del>نص محذوف</del>
<ins>نص مضاف</ins>
<sub>نص منخفض</sub>
<sup>نص مرتفع</sup>
القوائم
قائمة غير مرتبة:
<ul>
<li>عنصر 1</li>
<li>عنصر 2</li>
<li>عنصر 3</li>
</ul>
قائمة مرتبة:
<ol>
<li>الخطوة الأولى</li>
<li>الخطوة الثانية</li>
<li>الخطوة الثالثة</li>
</ol>
قائمة وصفية:
<dl>
<dt>HTML</dt>
<dd>لغة ترميز</dd>
<dt>CSS</dt>
<dd>لغة تنسيق</dd>
</dl>
الروابط
رابط بسيط:
<a href="https://example.com">زيارة الموقع</a>
رابط في نافذة جديدة:
<a href="https://example.com" target="_blank">فتح في نافذة جديدة</a>
رابط بريد إلكتروني:
<a href="mailto:example@email.com">إرسال بريد</a>
رابط داخلي:
<a href="#section1">انتقل للقسم</a>
<section id="section1">القسم الأول</section>
الصور
إضافة صورة:
<img src="image.jpg" alt="وصف الصورة">
صورة بحجم محدد:
<img src="image.jpg" alt="وصف" width="300" height="200">
صورة مع رابط:
<a href="page.html">
<img src="image.jpg" alt="صورة">
</a>
الجداول
جدول بسيط:
<table>
<tr>
<th>الاسم</th>
<th>العمر</th>
<th>المدينة</th>
</tr>
<tr>
<td>أحمد</td>
<td>25</td>
<td>القاهرة</td>
</tr>
<tr>
<td>محمد</td>
<td>30</td>
<td>الإسكندرية</td>
</tr>
</table>
جدول مع caption:
<table>
<caption>قائمة الطلاب</caption>
<tr>
<th>الاسم</th>
<th>الدرجة</th>
</tr>
<tr>
<td>أحمد</td>
<td>95</td>
</tr>
</table>
النماذج - المقدمة
ما هي النماذج؟
النماذج (Forms) تستخدم لجمع البيانات من المستخدمين وإرسالها للخادم.
<form action="/submit" method="POST">
<!-- عناصر النموذج هنا -->
</form>
عناصر النماذج
Input و Textarea و Select:
<form>
<label for="name">الاسم:</label>
<input type="text" id="name" name="name">
<label for="message">الرسالة:</label>
<textarea id="message" name="message" rows="4"></textarea>
<label for="country">البلد:</label>
<select id="country" name="country">
<option value="eg">مصر</option>
<option value="sa">السعودية</option>
</select>
<button type="submit">إرسال</button>
</form>
أنواع Input
أنواع Input المختلفة:
<input type="text" placeholder="نص">
<input type="email" placeholder="بريد إلكتروني">
<input type="password" placeholder="كلمة مرور">
<input type="number" min="0" max="100">
<input type="date">
<input type="time">
<input type="color">
<input type="range" min="0" max="100">
<input type="url" placeholder="رابط">
<input type="tel" placeholder="هاتف">
النماذج المتقدمة
Radio و Checkbox:
<form>
<p>اختر الجنس:</p>
<input type="radio" id="male" name="gender" value="male">
<label for="male">ذكر</label>
<input type="radio" id="female" name="gender" value="female">
<label for="female">أنثى</label>
<p>اختر الاهتمامات:</p>
<input type="checkbox" id="sports" name="interests" value="sports">
<label for="sports">رياضة</label>
<input type="checkbox" id="music" name="interests" value="music">
<label for="music">موسيقى</label>
<input type="file" name="file">
</form>
العناصر الدلالية
HTML5 Semantic Elements:
<header>
<h1>رأس الصفحة</h1>
</header>
<nav>
<a href="#">الرئيسية</a>
<a href="#">عن الموقع</a>
</nav>
<main>
<article>
<h2>مقال</h2>
<p>محتوى المقال</p>
</article>
</main>
<aside>
<h3>محتوى جانبي</h3>
</aside>
<footer>
<p>حقوق النشر</p>
</footer>
Footer و Aside
Footer:
<footer>
<p>© 2024 جميع الحقوق محفوظة</p>
<address>
البريد: example@email.com
</address>
</footer>
Aside:
<aside>
<h3>روابط مفيدة</h3>
<ul>
<li><a href="#">رابط 1</a></li>
<li><a href="#">رابط 2</a></li>
</ul>
</aside>
Div و Span
Div (Block Element):
<div class="container">
<h2>عنوان</h2>
<p>محتوى</p>
</div>
Span (Inline Element):
<p>هذا نص عادي <span class="highlight">نص مميز</span> ونص آخر</p>
الخصائص (Attributes)
الخصائص الشائعة:
<div id="unique-id" class="my-class" data-custom="value">
محتوى
</div>
<img src="image.jpg" alt="وصف" title="نص عند التمرير">
<input type="text" required placeholder="أدخل النص" disabled>
Meta Tags
Meta Tags الأساسية:
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="وصف الصفحة">
<meta name="keywords" content="كلمات مفتاحية">
<meta name="author" content="اسم المؤلف">
</head>
إضافة Media
Video:
<video width="320" height="240" controls>
<source src="video.mp4" type="video/mp4">
المتصفح لا يدعم الفيديو
</video>
Audio:
<audio controls>
<source src="audio.mp3" type="audio/mpeg">
المتصفح لا يدعم الصوت
</audio>
iframes
إدراج محتوى خارجي:
<iframe src="https://example.com" width="800" height="600"></iframe>
<iframe src="video.html" frameborder="0" allowfullscreen></iframe>
SVG و Canvas
SVG:
<svg width="100" height="100">
<circle cx="50" cy="50" r="40" fill="blue"></circle>
</svg>
Canvas:
<canvas id="myCanvas" width="200" height="100"></canvas>
<script>
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
ctx.fillStyle = "red";
ctx.fillRect(0, 0, 200, 100);
</script>
HTML5 APIs
Geolocation:
<button onclick="getLocation()">احصل على الموقع</button>
<script>
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
}
}
</script>
LocalStorage:
localStorage.setItem("name", "أحمد");
var name = localStorage.getItem("name");
localStorage.removeItem("name");
Accessibility
ARIA Attributes:
<button aria-label="إغلاق">X</button>
<div role="alert" aria-live="polite">رسالة</div>
<nav aria-label="القائمة الرئيسية">
<ul>
<li><a href="#">الرئيسية</a></li>
</ul>
</nav>
SEO Basics
Meta Tags للـ SEO:
<head>
<title>عنوان الصفحة</title>
<meta name="description" content="وصف مفصل للصفحة">
<meta name="keywords" content="كلمة1, كلمة2, كلمة3">
<link rel="canonical" href="https://example.com/page">
</head>
Web Workers
استخدام Web Workers:
// worker.js
self.onmessage = function(e) {
var result = e.data * 2;
self.postMessage(result);
};
// main.js
var worker = new Worker("worker.js");
worker.postMessage(10);
worker.onmessage = function(e) {
console.log(e.data); // 20
};
Web Storage
LocalStorage و SessionStorage:
// LocalStorage (يبقى حتى بعد إغلاق المتصفح)
localStorage.setItem("username", "أحمد");
var user = localStorage.getItem("username");
localStorage.removeItem("username");
localStorage.clear();
// SessionStorage (يُحذف عند إغلاق التبويب)
sessionStorage.setItem("temp", "قيمة مؤقتة");
var temp = sessionStorage.getItem("temp");
Responsive Images
صور متجاوبة:
<img src="image.jpg"
srcset="small.jpg 300w, medium.jpg 600w, large.jpg 1200w"
sizes="(max-width: 600px) 300px, (max-width: 1200px) 600px, 1200px"
alt="صورة متجاوبة">
<picture>
<source media="(max-width: 600px)" srcset="small.jpg">
<source media="(max-width: 1200px)" srcset="medium.jpg">
<img src="large.jpg" alt="صورة">
</picture>
Best Practices
أفضل الممارسات:
- استخدم HTML5 semantic elements
- أضف alt للصور دائماً
- استخدم headings بشكل هرمي (h1 ثم h2...)
- استخدم labels مع inputs
- تحقق من صحة HTML (Validation)
- استخدم indentation واضح
- أضف comments للكود المعقد
مشروع متوسط
صفحة شخصية بسيطة:
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<meta charset="UTF-8">
<title>صفحتي الشخصية</title>
</head>
<body>
<header>
<h1>أحمد محمد</h1>
<nav>
<a href="#about">عنّي</a>
<a href="#skills">المهارات</a>
<a href="#contact">اتصل بي</a>
</nav>
</header>
<main>
<section id="about">
<h2>عنّي</h2>
<p>مطور ويب متحمس</p>
</section>
<section id="skills">
<h2>المهارات</h2>
<ul>
<li>HTML</li>
<li>CSS</li>
<li>JavaScript</li>
</ul>
</section>
<section id="contact">
<h2>اتصل بي</h2>
<form>
<input type="email" placeholder="بريدك الإلكتروني">
<textarea placeholder="رسالتك"></textarea>
<button type="submit">إرسال</button>
</form>
</section>
</main>
<footer>
<p>© 2024 جميع الحقوق محفوظة</p>
</footer>
</body>
</html>
Validation
التحقق من صحة HTML:
استخدم أدوات التحقق للتأكد من صحة كود HTML.
- W3C Validator: https://validator.w3.org/
- HTMLHint: أداة للتحقق من الأخطاء
- VS Code Extensions: إضافات للتحقق التلقائي
أخطاء شائعة:
- نسيان إغلاق الوسوم
- استخدام attributes غير صحيحة
- عدم استخدام semantic elements
- نسيان alt للصور
مشروع تطبيقي كامل
موقع مدونة كامل:
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>مدونتي</title>
</head>
<body>
<header>
<h1>مدونتي الشخصية</h1>
<nav>
<ul>
<li><a href="index.html">الرئيسية</a></li>
<li><a href="about.html">عنّي</a></li>
<li><a href="contact.html">اتصل بي</a></li>
</ul>
</nav>
</header>
<main>
<article>
<header>
<h2>عنوان المقال</h2>
<time datetime="2024-01-15">15 يناير 2024</time>
</header>
<section>
<p>محتوى المقال...</p>
<img src="article-image.jpg" alt="صورة المقال">
</section>
<footer>
<p>كاتب: أحمد محمد</p>
</footer>
</article>
<aside>
<h3>مقالات ذات صلة</h3>
<ul>
<li><a href="#">مقال 1</a></li>
<li><a href="#">مقال 2</a></li>
</ul>
</aside>
</main>
<footer>
<p>© 2024 جميع الحقوق محفوظة</p>
<address>
البريد: blog@example.com
</address>
</footer>
</body>
</html>