أهلاً وسهلاً بكم في مختبر wowolabs للإبداع والأكواد والتجارب الرقمية.

إلى عشاق القهوة والبرمجة: الفكرة الصغيرة قد تتحول إلى مشروع كبير.

إلى كل مبدع: اترك بصمتك، فالأفكار الجميلة تستحق أن تُرى.

رسالة اليوم: النجاح ليس صدفة؛ إنه مجموعة محاولات لم تتوقف.








Flash Messages | رسائل تنبيهية

كود رسائل تنبيهية Flash Messages بتصميم احترافي HTML CSS JavaScript

تصميم رسائل Flash Messages احترافي

في هذا المقال أشارككم كود رسائل تنبيهية أو ما يعرف باسم Flash Messages، وهو من الأكواد الصغيرة التي أحب استخدامها كثيراً داخل المواقع لأنها تعطي المستخدم إحساساً أن الموقع تفاعلي ومنظم.

أحياناً يكون الفرق بين موقع عادي وموقع مريح هو رسالة صغيرة تظهر بعد الضغط على زر، مثل رسالة نجاح عند حفظ البيانات أو رسالة خطأ عند وجود مشكلة. هذه التفاصيل الصغيرة ترفع تجربة المستخدم بشكل ملحوظ.

أكثر شيء يعجبني في هذا النوع من الأكواد أنه بسيط، لكنه يعطي لمسة احترافية واضحة. بدل أن يضغط الزائر على زر ولا يعرف هل حدث شيء أم لا، تظهر له رسالة مباشرة تخبره بما حصل.

01 ما هي رسائل Flash Messages؟

رسائل Flash Messages هي إشعارات قصيرة تظهر في واجهة الموقع بعد تنفيذ إجراء معين. مثلًا عندما يرسل المستخدم نموذج تواصل، يمكن أن تظهر رسالة تقول: "تم الإرسال بنجاح". وإذا حدث خطأ، تظهر رسالة أخرى توضح أن هناك مشكلة.

الفكرة ليست مجرد شكل جمالي، بل وسيلة مهمة لتوجيه المستخدم ومنع الحيرة أثناء استخدام الموقع.

02 متى تحتاج إلى هذا الكود؟

  • عند إنشاء نموذج تسجيل أو تسجيل دخول
  • عند إضافة زر نسخ كود أو رابط
  • عند بناء لوحة تحكم بسيطة أو تعديل عناصر الواجهة مثل إخفاء المشاركات الشائعة في قالب Contempo
  • عند تصميم متجر إلكتروني أو صفحة طلب
  • عند عرض تنبيهات نجاح أو خطأ أو تحذير داخل الموقع
  • عند إتمام عملية شراء أو دفع إلكتروني
  • عند إرسال نموذج اتصال أو استبيان
  • عند حفظ الإعدادات في لوحة التحكم

03 لماذا هذا الكود مناسب للمبتدئين؟

الكود لا يحتاج إلى مكتبات خارجية مثل jQuery أو Bootstrap، فهو مبني فقط باستخدام HTML وCSS وJavaScript. وهذا ما يجعله خفيفًا وسهل التعديل.

يمكنك تغيير الألوان، النصوص، مدة ظهور الرسالة، مكان ظهورها، وحجمها بسهولة من داخل الكود نفسه دون الحاجة لخبرة برمجية كبيرة.

04 مميزات كود الرسائل التنبيهية

  • ✅ تصميم حديث بألوان واضحة
  • ✅ يدعم أربع حالات: نجاح، خطأ، تحذير، معلومات
  • ✅ يظهر ويختفي بحركة ناعمة
  • ✅ يمكن إغلاق الرسالة يدويًا
  • ✅ مناسب لمواقع بلوجر والمواقع العادية
  • ✅ سهل التعديل ولا يحتاج خبرة كبيرة
  • ✅ لا يؤثر على سرعة الموقع
  • ✅ متوافق مع جميع المتصفحات والأجهزة، خاصة عندما يكون القالب متجاوب أصلًا بالجوال

05 تجربتي مع هذا النوع من الأكواد

من تجربتي، وجود رسالة تنبيه واضحة يقلل ارتباك الزائر بشكل كبير. في بعض المشاريع البسيطة كنت أضع زر نسخ أو إرسال بدون أي رسالة، وكان المستخدم لا يعرف هل تم تنفيذ الأمر أم لا.

بعد إضافة Flash Message أصبح التفاعل أوضح بكثير. لذلك أعتبر هذا الكود من الأكواد الصغيرة التي تستحق أن تكون داخل أي مشروع واجهة أمامية.

📖 إيش فائدة هذا الكود؟

رسائل فلاش Flash Messages هي إشعارات منبثقة تظهر للمستخدم بعد تنفيذ إجراء معين داخل الموقع.

رسالة نجاح: تظهر بعد حفظ البيانات أو إتمام عملية بنجاح
رسالة خطأ: تظهر عند فشل عملية أو وجود مشكلة
⚠️ رسالة تحذير: تظهر لتنبيه المستخدم قبل تنفيذ إجراء مهم
ℹ️ رسالة معلومات: تظهر لإعلام المستخدم بتحديث أو معلومة جديدة

⚡ طريقة الاستخدام:
showFlash('success') → رسالة نجاح
showFlash('error') → رسالة خطأ
showFlash('warning') → رسالة تحذير
showFlash('info') → رسالة معلومات

06 كيفية دمج الكود في موقعك خطوة بخطوة

دمج كود Flash Messages في موقعك عملية بسيطة جدًا ولا تحتاج خبرة برمجية متقدمة. اتبع الخطوات التالية:

  1. الخطوة الأولى: انسخ الكود الكامل من الأسفل واحفظه في ملف باسم flash.html
  2. الخطوة الثانية: افتح الملف في أي محرر نصوص مثل Notepad أو VS Code
  3. الخطوة الثالثة: عدّل النصوص والألوان حسب هوية موقعك من داخل الكود
  4. الخطوة الرابعة: ارفع الملف إلى استضافة موقعك أو ضعه داخل مشاركة بلوجر في وضع HTML
  5. الخطوة الخامسة: اختبر ظهور الرسائل بالضغط على كل زر للتأكد من عمله بشكل صحيح

جرب الرسائل الآن

اضغط على الأزرار التالية لتجربة الرسائل التنبيهية:

📄 الكود الكامل لرسائل Flash Messages
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flash Messages - Waad alsheme</title>
    <style>
        * { margin: 0; padding: 0; box-sizing: border-box; }
        :root {
            --success: #00B894;
            --error: #E17055;
            --warning: #FDCB6E;
            --info: #0984E3;
            --dark: #2D3436;
        }
        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            min-height: 100vh;
            padding: 40px 20px;
            background: transparent !important;
        }
        .container { max-width: 800px; margin: 0 auto; }
        .flash-container {
            position: fixed; top: 20px; left: 20px; z-index: 1000;
            display: flex; flex-direction: column; gap: 15px; max-width: 400px;
        }
        .flash-message {
            padding: 20px 25px; border: 4px solid var(--dark);
            display: flex; align-items: center; gap: 15px;
            position: relative; overflow: hidden;
            animation: slideIn 0.5s ease, pulse 2s infinite;
            box-shadow: 8px 8px 0 var(--dark); transform: translate(-3px, -3px);
        }
        @keyframes slideIn {
            from { transform: translateX(-100%); opacity: 0; }
            to { transform: translate(-3px, -3px); opacity: 1; }
        }
        @keyframes pulse {
            0%, 100% { box-shadow: 8px 8px 0 var(--dark); }
            50% { box-shadow: 12px 12px 0 var(--dark); }
        }
        .flash-success { background: var(--success); color: white; }
        .flash-error { background: var(--error); color: white; }
        .flash-warning { background: var(--warning); color: var(--dark); }
        .flash-info { background: var(--info); color: white; }
        .flash-icon {
            width: 50px; height: 50px; background: white;
            border: 3px solid var(--dark); display: flex;
            align-items: center; justify-content: center;
            font-size: 1.5rem; flex-shrink: 0;
        }
        .flash-success .flash-icon { color: var(--success); }
        .flash-error .flash-icon { color: var(--error); }
        .flash-warning .flash-icon { color: var(--warning); }
        .flash-info .flash-icon { color: var(--info); }
        .flash-content { flex: 1; }
        .flash-title {
            font-weight: 800; font-size: 1.1rem; margin-bottom: 5px;
            text-transform: uppercase; letter-spacing: 1px;
        }
        .flash-text { font-size: 0.95rem; font-weight: 600; }
        .flash-close {
            width: 35px; height: 35px; background: var(--dark);
            color: white; border: none; font-size: 1.2rem;
            cursor: pointer; display: flex; align-items: center;
            justify-content: center; transition: all 0.2s ease;
        }
        .flash-close:hover { transform: scale(1.1) rotate(90deg); }
        .flash-progress {
            position: absolute; bottom: 0; left: 0; height: 6px;
            background: rgba(0,0,0,0.3); animation: progress 5s linear forwards;
        }
        @keyframes progress { from { width: 100%; } to { width: 0%; } }
        .flash-message::before {
            content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0;
            background: repeating-linear-gradient(45deg, transparent, transparent 10px, rgba(255,255,255,0.1) 10px, rgba(255,255,255,0.1) 20px);
            animation: moveStripes 20s linear infinite; pointer-events: none;
        }
        @keyframes moveStripes { 0% { transform: translateX(0); } 100% { transform: translateX(28px); } }
        .demo-section { padding: 0; border: none; box-shadow: none; background: transparent !important; }
        .demo-title { font-size: 1.5rem; font-weight: 800; margin-bottom: 30px; color: var(--dark); }
        .demo-buttons { display: flex; flex-wrap: wrap; gap: 15px; }
        .demo-btn {
            padding: 15px 30px; font-size: 1rem; font-weight: 700;
            border: 4px solid var(--dark); cursor: pointer;
            transition: all 0.2s ease; text-transform: uppercase; letter-spacing: 1px;
        }
        .demo-btn:hover { transform: translate(-3px, -3px); box-shadow: 6px 6px 0 var(--dark); }
        .btn-success { background: var(--success); color: white; }
        .btn-error { background: var(--error); color: white; }
        .btn-warning { background: var(--warning); color: var(--dark); }
        .btn-info { background: var(--info); color: white; }
        .flash-message.hiding { animation: slideOut 0.5s ease forwards; }
        @keyframes slideOut { to { transform: translateX(-150%); opacity: 0; } }
    </style>
</head>
<body>
    <div class="container">
        <div class="demo-section">
            <h2 class="demo-title">اختبر الرسائل:</h2>
            <div class="demo-buttons">
                <button class="demo-btn btn-success" onclick="showFlash('success')">نجاح ✓</button>
                <button class="demo-btn btn-error" onclick="showFlash('error')">خطأ ✕</button>
                <button class="demo-btn btn-warning" onclick="showFlash('warning')">تحذير !</button>
                <button class="demo-btn btn-info" onclick="showFlash('info')">معلومة ℹ</button>
            </div>
        </div>
    </div>
    <div class="flash-container" id="flashContainer"></div>
    <script>
        const messages = {
            success: { icon: '✓', title: 'تم بنجاح!', text: 'تم حفظ التغييرات بنجاح', class: 'flash-success' },
            error: { icon: '✕', title: 'خطأ!', text: 'حدث خطأ أثناء الحفظ', class: 'flash-error' },
            warning: { icon: '!', title: 'تنبيه!', text: 'يرجى مراجعة البيانات', class: 'flash-warning' },
            info: { icon: 'ℹ', title: 'معلومة', text: 'هناك تحديث جديد متوفر', class: 'flash-info' }
        };
        function showFlash(type) {
            const container = document.getElementById('flashContainer');
            const msg = messages[type];
            const flash = document.createElement('div');
            flash.className = 'flash-message ' + msg.class;
            flash.innerHTML = '<div class="flash-icon">' + msg.icon + '</div><div class="flash-content"><div class="flash-title">' + msg.title + '</div><div class="flash-text">' + msg.text + '</div></div><button class="flash-close" onclick="closeFlash(this)">×</button><div class="flash-progress"></div>';
            container.appendChild(flash);
            setTimeout(() => { closeFlash(flash.querySelector('.flash-close')); }, 5000);
        }
        function closeFlash(btn) {
            const flash = btn.closest('.flash-message');
            flash.classList.add('hiding');
            setTimeout(() => { flash.remove(); }, 500);
        }
        window.onload = () => { setTimeout(() => showFlash('info'), 500); };
    </script>
</body>
</html>

أسئلة شائعة

01 هل الكود يعمل على بلوجر؟
نعم، يمكن وضعه داخل مشاركة بلوجر في وضع HTML أو داخل صفحة مخصصة.
02 هل يمكن تغيير النصوص؟
نعم، ابحث عن const messages وعدل العنوان والنص لكل رسالة.
03 هل يمكن تغيير مدة ظهور الرسالة؟
نعم، غير رقم 4000 داخل setTimeout، وهو يعني 4 ثوانٍ.
04 هل يعمل على الجوال؟
نعم، التصميم يعمل على جميع أحجام الشاشات، وهو ما يتكامل بشكل مثالي عندما يكون القالب متجاوب أصلًا بالجوال.
05 هل يحتاج مكتبات خارجية؟
لا، الكود مبني بالكامل بـ HTML وCSS وJavaScript فقط.
06 هل يمكن استخدام الكود في أكثر من صفحة؟
نعم، انسخ الكود في كل صفحة تريد استخدامه فيها.
وعد الشيمي

CREATOR / WOWOLABS

وعد الشيمي

مصممة واجهات وتجارب المستخدم ومطورة محتوى رقمي. أحول الأفكار إلى واجهات وأدوات وتجارب ويب تجمع بين الجمال والوظيفة.

التعليقات

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.

مشاركة مميزة

برومبت تحويل الصورة إلى رسم رصاص واقعي داخل دفتر سكتش

برومبت تحويل الصورة إلى رسم رصاص واقعي داخل دفتر سكتش مع الحفاظ على ملامح الوجه برومبت جاهزًا للنسخ، وليست أداة مباشرة لتوليد الصور. يمكنك استخدام المطالبة داخل Gemini أو ChatGPT أو أي منصة تدعم إنشاء الصور وتعديلها بالذكاء الاصطناعي، بهدف تحويل الصورة الشخصية إلى رسم رصاص واقعي داخل دفتر سكتش مع الاحتفاظ بتفاصيل الوجه الأصلية. محتويات المقال 01 مقدمة عن برومبت الرسم بالرصاص الواقعي 02 ما الفكرة التي ينفذها هذا البرومبت؟ 03 خطوات استخدام برومبت الرسم داخل دفتر سكتش 04 برومبت وصف ملامح الوجه والرسم بالرصاص 05 قالب عام للحفاظ على ملامح الشخص 06 نسخة محسنة للحصول على نتيجة أكثر واقعية 07 ما الفرق بين البرومبت الأول والقالب العام؟ 08 نصائح للحصول على رسم رصاص أكثر دقة 09 أخطاء شائعة عند إنشاء صور الرسم بالرصاص 10 استخدامات الصور الناتجة 11 أمثلة على النتائج المتوقعة 12 الأسئلة الشائعة 13 الخلاصة 01 مقدمة عن برومبت ...

تحميل ملصقات واتساب أعياد ميلاد بالأسماء مجاناً

تحميل ملصقات أسماء أعياد الميلاد مجانًا من WOWOLabs يسعد صباحكم ومساءكم بكل خير يا زوار وأعضاء مدونة WOWOLabs الحلوين 👉 اليوم صممت لكم ملصقات أسماء تجنن لأعياد الميلاد، تنفع كملصقات للويب، وبوسترات طباعية، وبنرات إعلانية، وحالات واتساب، وتصاميم سوشيال ميديا الملصقات مصممة بجودة عالية جدًا، وحصرية، وما راح تحصلونها بنفس الشكل في مكان ثاني، لأنها من تصميمي وعمل يدي. والأحلى من كذا، أي شخص يعجبه هذا النمط ويحب أسوي له تصميم بنفس الأسلوب، سواء باسم عربي أو إنجليزي، يكتب الاسم في التعليقات وبإذن الله أسويه له. فوائد ملصقات أسماء أعياد الميلاد توفير الوقت في تصميم بطاقات التهنئة. إضافة لمسة شخصية باسم صاحب المناسبة. مناسبة للاستخدام في السوشيال ميديا والطباعة. تصلح للهدايا الرقمية والمفاجآت البسيطة. تعطي التصميم شكلًا احتفاليًا جاهزًا بدون برامج معقدة. مميزات هذه المجموعة تصاميم حصرية من WOWOLabs. مناسبة للأسماء العربية والإنجليزية. تصلح للبوسترات والبنرات والملصقات. جودة واضحة ومناسبة للاستخدام الرقمي. إمكانية طلب أسماء جديدة من خلال التعليقات. استخدامات ا...

ملصقات حروف زخرفية و نباتية مجانية

حروف نباتية زخرفية PNG بخلفية شفافة تحميل حروف بخلفية شفافة بتصميم نباتي أنيق يجمع بين جمال الحروف الزخرفية والأوراق الخضراء والطحالب والزهور الصغيرة. ☷ محتويات المقال 01 ما هي الحروف النباتية المزخرفة؟ 02 مميزات التصميم 03 استخدامات الحروف 04 معاينة وتحميل الملصقات 05 طريقة التحميل 06 الخلاصة 01 ما هي الحروف النباتية المزخرفة؟ هي حروف PNG بخلفية شفافة بتصميم طبيعي مميز، تجمع بين الحروف الزخرفية والعناصر النباتية مثل الأوراق الخضراء والطحالب والزهور الصغيرة. 02 مميزات التصميم خلفية PNG شفافة. جودة عالية مناسبة للتصميم والطباعة. عناصر نباتية وزخارف طبيعية واقعية. مناسبة للشعارات والعناوين والهوية البصرية. سهلة الاستخدام في برامج التصميم المختلفة. 03 استخدامات الحروف تصميم الشعارات. أسماء العلامات التجارية. بطاقات الدعوات. منشورات وسائل التواصل الاجتماعي. مواقع الويب والمدونات. المشاريع التعليمية والفنية. ولتصميمات زهرية أخرى يمكنك مشاهدة ملصقات حروف النيون الفانتزية مجانية PNG و ملصقات حروف بتلات PNG مجانية . 04 معاينة وتحميل الملصقات وضعت كل ملصق د...

ملصقات فانتازية ثلاثية الأبعاد بصيغة PNG

PNG بخلفية شفافة ملصقات حروف النيون الفانتزية مجانية PNG مجموعة مجانية من الملصقات والعناصر الفانتازية ثلاثية الأبعاد بصيغة PNG وخلفية شفافة، جاهزة للإضافة إلى التصاميم بدون قص أو إزالة خلفية. يمكن استخدامها في التصاميم الشخصية، منشورات السوشيال ميديا، القصص، البطاقات، المشاريع التعليمية، أغلفة الملفات وخلفيات الهاتف. خلفية شفافة ملفات PNG جاهزة للدمج مباشرة داخل التصميم. تصميم فانتازي تفاصيل ثلاثية الأبعاد وألوان مناسبة للمشاريع الإبداعية. محتويات المقال 01 ما الذي يميز المجموعة؟ 02 أين يمكن استخدام الملصقات؟ 03 استخدامها داخل برامج التصميم 04 معاينة وتحميل الملصقات 05 أسئلة شائعة ...

بحث هذه المدونة الإلكترونية