UNPKG

domahaflip

Version:

A lightweight and responsive JavaScript library for creating 3D page-flipping effects.

198 lines (161 loc) 6.22 kB
/* styles/domahaflip.css (النسخة المطورة) */ .domahaflip-container { position: relative; margin: 20px auto; box-shadow: 0 10px 25px rgba(0,0,0,0.2); border-radius: 10px; overflow: hidden; perspective: 1500px; transform-style: preserve-3d; /* ---- بداية التغييرات الجديدة ---- */ width: 90%; /* اجعل العرض 90% من عرض العنصر الأب */ max-width: var(--max-width, 800px); /* حد أقصى للعرض نتحكم به من JS */ aspect-ratio: var(--aspect-ratio, 800 / 500); /* أهم خاصية للحفاظ على شكل الكتاب */ /* لا نحتاج لتحديد الطول (height) بعد الآن، سيتم حسابه تلقائيًا */ /* ---- نهاية التغييرات الجديدة ---- */ } .domahaflip-page { position: absolute; width: 100%; height: 100%; top: 0; left: 0; border: 1px solid #ccc; box-sizing: border-box; display: flex; /* نجعل كل الصفحات مرئية في طبقات فوق بعضها */ align-items: center; justify-content: center; padding: 20px; font-family: sans-serif; /* خصائص التقليب والحركة */ transform-origin: left center; /* التقليب من جهة اليسار (مثل الكتاب) */ backface-visibility: hidden; /* إخفاء الوجه الخلفي للصفحة أثناء التقليب */ transition: transform var(--flip-duration, 0.8s) ease-in-out; /* مدة الحركة */ transform-style: preserve-3d; } /* هذا الكلاس هو الذي يقوم بفعل التقليب */ .domahaflip-page.flipped { transform: rotateY(-180deg); transform: rotateY(-180deg); /* أضف هذا السطر لإضافة ظل حول الصفحة المتحركة */ box-shadow: 0 5px 20px rgba(0,0,0,0.4); } /* تنسيقات المحتوى الداخلي */ .domahaflip-page img { max-width: 100%; max-height: 100%; object-fit: contain; } .domahaflip-page.text-content { flex-direction: column; } /* ---- بداية كود الظل ---- */ /* إنشاء عنصر الظل الوهمي لكل صفحة وإخفاؤه مبدئيًا */ .domahaflip-page::after { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; /* هذا هو الظل: تدرج شفاف من اليسار لليمين */ background: linear-gradient(to right, rgba(0, 0, 0, 0.4) 0%, rgba(0, 0, 0, 0) 20%); opacity: 0; /* إخفاء الظل مبدئيًا */ transition: opacity var(--flip-duration, 0.8s); /* حركة ظهور واختفاء الظل */ } /* * السطر السحري: * هذا يعني: "عندما يتم قلب صفحة (تأخذ كلاس .flipped)، * قم بإظهار الظل الخاص بالصفحة التالية لها مباشرة" */ .domahaflip-page.flipped + .domahaflip-page::after { opacity: 1; } /* ---- نهاية كود الظل ---- */ /* ---- بداية كود أزرار التنقل ---- */ .domahaflip-nav-button { position: absolute; top: 50%; transform: translateY(-50%); z-index: 10000; /* الخصائص "المحصنة" التي تتجاوز إعدادات Tailwind/Bootstrap */ background-color: rgba(0, 0, 0, 0.4); color: white; border: none; padding: 0; appearance: none; /* الأهم لإلغاء المظهر الافتراضي للزر */ /* باقي الخصائص */ border-radius: 50%; width: 40px; height: 40px; font-size: 20px; line-height: 40px; text-align: center; cursor: pointer; user-select: none; opacity: 0; transition: opacity 0.3s, background-color 0.3s; } /* إظهار الأزرار عند تمرير الماوس فوق الحاوية */ .domahaflip-container:hover .domahaflip-nav-button { opacity: 1; } /* تغيير اللون عند تمرير الماوس فوق الزر نفسه */ .domahaflip-nav-button:hover { background-color: rgba(0, 0, 0, 0.7); } /* تحديد مكان كل زر */ .domahaflip-nav-prev { left: 15px; } .domahaflip-nav-next { right: 15px; } /* ---- نهاية كود أزرار التنقل ---- */ /* ---- بداية كود تجاوبية الأسهم ---- */ /* هذه التنسيقات سيتم تطبيقها فقط على الشاشات التي عرضها 480 بكسل أو أقل */ @media (max-width: 480px) { .domahaflip-nav-button { /* نجعل الأزرار أصغر حجمًا */ width: 32px; height: 32px; /* نضبط حجم الخط ومحاذاته مع الحجم الجديد */ font-size: 16px; line-height: 32px; } /* نقرب الأزرار من الحافة */ .domahaflip-nav-prev { left: 8px; } .domahaflip-nav-next { right: 8px; } } /* ---- نهاية كود تجاوبية الأسهم ---- */ /* ---- بداية كود مؤشر التحميل ---- */ /* نضيف كلاس جديد للصفحة التي يتم تحميل صورتها */ .domahaflip-page.loading::before { content: ''; position: absolute; top: 50%; left: 50%; width: 30px; height: 30px; margin-top: -15px; /* نصف الارتفاع */ margin-left: -15px; /* نصف العرض */ border-radius: 50%; border: 3px solid rgba(0, 0, 0, 0.2); border-top-color: rgba(0, 0, 0, 0.6); animation: domahaflip-spinner 0.8s linear infinite; } @keyframes domahaflip-spinner { to { transform: rotate(360deg); } } /* ---- نهاية كود مؤشر التحميل ---- */ /* ---- بداية كود إلغاء الحركة ---- */ /* هذا الكلاس عند إضافته للحاوية، يلغي الحركة مؤقتًا من على الصفحات */ .domahaflip-container.no-transition .domahaflip-page { transition: none; } /* ---- نهاية كود إلغاء الحركة ---- */