آخر الأخبار

استكشف في مدونة أوعي وشك عالم الابتكار

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

دليل CSS لتصميم مؤشرات(Loaders) 9 نماذج جاهزة

الكود المقدم يعرض مجموعة متنوعة من مؤشرات التحميل التي يمكن استخدامها بسهولة في أي موقع ويب. هذه المؤشرات تعتمد فقط علىcss، مما يجعلها خفيفة وسهلة....
دليل CSS لتصميم مؤشرات تحميل تفاعلية 9 نماذج جاهزة

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

تُعد مؤشرات التحميل (Loaders) المصممة باستخدام CSS واحدة من الأدوات الرائعة لتحسين تجربة المستخدم وأداء الموقع. بالإضافة إلى ذلك، تبدو دائمًا مبتكرة، حتى لو كانت مرئية للحظات فقط، حتى يتم تحميل الصفحة بالكامل.

شرح الكود وأهميته:

الكود المقدم يعرض 9 أنواع مختلفة من مؤشرات التحميل (Loaders) المصممة باستخدام CSS فقط، دون الحاجة إلى استخدام أي لغات برمجة أخرى مثل JavaScript. هذه المؤشرات بسيطة وسهلة التطبيق، ويمكن استخدامها لتحسين تجربة المستخدم أثناء انتظار تحميل المحتوى.

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

شرح الكود بالتفصيل

الهيكل الأساسي (HTML):

<div class="page">
	<header class="header">
		<h1 class="header-title">Simple CSS loaders</h1>
		<p class="header-subtitle">single html element css animation</p>
	</header>

	<main class="container">
		<div class="item">
			<i class="loader --2"></i>
		</div>
		<div class="item">
			<i class="loader --9"></i>
		</div>
		<div class="item">
			<i class="loader --3"></i>
		</div>

		<div class="item">
			<i class="loader --4"></i>
		</div>
		<div class="item">
			<i class="loader --1"></i>
		</div>
		<div class="item">
			<i class="loader --5"></i>
		</div>

		<div class="item">
			<i class="loader --6"></i>
		</div>
		<div class="item">
			<i class="loader --8"></i>
		</div>
		<div class="item">
			<i class="loader --7"></i>
		</div>
	</main>
</div>
    

يتم إنشاء هيكل أساسي باستخدام <main> يحتوي على عدة <div>، كل منها يمثل مؤشر تحميل مختلف.

يتم استخدام العنصر <i> مع كلاس kisnules وكلاس إضافي مثل udes-1 لتحديد نوع المؤشر.

التنسيقات الأساسية (CSS):

.loader {
	--color: white;
	--size-mid: 6vmin;
	--size-dot: 1.5vmin;
	--size-bar: 0.4vmin;
	--size-square: 3vmin;

	position: relative;
	width: 50%;
	display: grid;
	place-items: center;
}

.loader::before,
.loader::after {
	content: '';
	box-sizing: border-box;
	position: absolute;
}

/**
	loader --1
**/
.loader.--1::before {
	width: var(--size-mid);
	height: var(--size-mid);
	border: 4px solid var(--color);
	border-top-color: transparent;
	border-radius: 50%;
	animation: loader-1 1s linear infinite;
}

.loader.--1::after {
	width: calc(var(--size-mid) - 2px);
	height: calc(var(--size-mid) - 2px);
	border: 2px solid transparent;
	border-top-color: var(--color);
	border-radius: 50%;
	animation: loader-1 0.6s linear reverse infinite;
}

@keyframes loader-1 {
	100% {
		transform: rotate(1turn);
	}
}

/**
	loader --2
**/
.loader.--2::before,
.loader.--2::after {
	width: var(--size-dot);
	height: var(--size-dot);
	background-color: var(--color);
	border-radius: 50%;
	opacity: 0;
	animation: loader-2 0.8s cubic-bezier(0.2, 0.32, 0, 0.87) infinite;
}

.loader.--2::after {
	animation-delay: 0.3s;
}

@keyframes loader-2 {
	0%, 80%, 100% {
		opacity: 0;
	}

	33% {
		opacity: 1;
	}

	0%, 100% {
		transform: translateX(-4vmin);
	}

	90% {
		transform: translateX(4vmin);
	}
}

/**
	loader --3
**/
.loader.--3::before,
.loader.--3::after {
	width: var(--size-dot);
	height: var(--size-dot);
	background-color: var(--color);
	border-radius: 50%;
	animation: loader-3 1.2s ease-in-out infinite;
}

.loader.--3::before {
	left: calc(50% - 1.6vmin - var(--size-dot));
}

.loader.--3::after {
	left: calc(50% + 1.6vmin);
	animation-delay: -0.4s;
}

@keyframes loader-3 {
	0%, 100% {
		transform: translateY(-2.6vmin);
	}

	44% {
		transform: translateY(2.6vmin);
	}
}

/**
	loader --4
**/
.loader.--4::before {
	height: var(--size-bar);
	width: 6vmin;
	background-color: var(--color);
	animation: loader-4 0.8s cubic-bezier(0, 0, 0.03, 0.9) infinite;
}

@keyframes loader-4 {
	0%, 44%, 88.1%, 100% {
		transform-origin: left;
	}

	0%, 100%, 88% {
		transform: scaleX(0);
	}

	44.1%, 88% {
		transform-origin: right;
	}

	33%, 44% {
		transform: scaleX(1);
	}
}

/**
	loader --5
**/
.loader.--5::before,
.loader.--5::after {
	height: 3vmin;
	width: var(--size-bar);
	background-color: var(--color);
	animation: loader-5 0.6s cubic-bezier(0, 0, 0.03, 0.9) infinite;
}

.loader.--5::before {
	left: calc(50% - 1vmin);
	top: calc(50% - 3vmin);
}

.loader.--5::after {
	left: calc(50% + 1vmin);
	top: calc(50% - 1vmin);
	animation-delay: 0.2s;
}

@keyframes loader-5 {
	0%, 88%, 100% {
		opacity: 0;
	}

	0% {
		transform: translateY(-6vmin);
	}

	33% {
		opacity: 1;
	}

	33%, 88% {
		transform: translateY(3vmin);
	}
}

/**
	loader --6
**/
.loader.--6::before {
	width: var(--size-square);
	height: var(--size-square);
	background-color: var(--color);
	top: calc(50% - var(--size-square));
	left: calc(50% - var(--size-square));
	animation: loader-6 2.4s cubic-bezier(0, 0, 0.24, 1.21) infinite;
}

@keyframes loader-6 {
	0%, 100% {
		transform: none;
	}

	25% {
		transform: translateX(100%);
	}

	50% {
		transform: translateX(100%) translateY(100%);
	}

	75% {
		transform: translateY(100%);
	}
}

/**
	loader --7
**/
.loader.--7::before,
.loader.--7::after {
	width: var(--size-square);
	height: var(--size-square);
	background-color: var(--color);
}

.loader.--7::before {
	top: calc(50% - var(--size-square));
	left: calc(50% - var(--size-square));
	animation: loader-6 2.4s cubic-bezier(0, 0, 0.24, 1.21) infinite;
}

.loader.--7::after {
	top: 50%;
	left: 50%;
	animation: loader-7 2.4s cubic-bezier(0, 0, 0.24, 1.21) infinite;
}

@keyframes loader-7 {
	0%, 100% {
		transform: none;
	}

	25% {
		transform: translateX(-100%);
	}

	50% {
		transform: translateX(-100%) translateY(-100%);
	}

	75% {
		transform: translateY(-100%);
	}
}

/**
	loader --8
**/
.loader.--8::before,
.loader.--8::after {
	width: var(--size-dot);
	height: var(--size-dot);
	border-radius: 50%;
	background-color: var(--color);
}

.loader.--8::before {
	top: calc(50% + 4vmin);
	animation: loader-8-1 0.8s cubic-bezier(0.06, 0.01, 0.49, 1.18) infinite;
}

.loader.--8::after {
	opacity: 0;
	top: calc(50% - 2vmin);
	animation: loader-8-2 0.8s cubic-bezier(0.46,-0.1, 0.27, 1.07) 0.2s infinite;
}

@keyframes loader-8-1 {
	0%, 55%, 100% {
		opacity: 0;
	}

	0% {
		transform: scale(0.2);
	}

	22% {
		opacity: 1;
	}

	33%, 55% {
		transform: scale(1) translateY(-6vmin);
	}
}

@keyframes loader-8-2 {
	0%, 100% {
		opacity: 0;
	}

	33% {
		opacity: 0.3;
	}

	0% {
		transform: scale(0);
	}

	100% {
		transform: scale(4);
	}
}

/**
	loader --9
**/
.loader.--9::before,
.loader.--9::after {
	width: var(--size-dot);
	height: var(--size-dot);
	border-radius: 50%;
	background-color: var(--color);
	animation: loader-9 0.42s cubic-bezier(0.39, 0.31, 0, 1.11) infinite;
}

.loader.--9::before {
	left: calc(50% - var(--size-dot) - 1.6vmin);
}

.loader.--9::after {
	left: calc(50% + 1.6vmin);
	animation-delay: 0.12s;
}

@keyframes loader-9 {
	0%, 100% {
		opacity: 0;
	}

	0% {
		transform: translate(-4vmin, -4vmin);
	}

	66% {
		opacity: 1;
	}

	66%, 100% {
		transform: none;
	}
}

/**
	miscs
**/

.container {
	display: grid;
	grid-template-columns: repeat(3, 18vmin);
	grid-template-rows: repeat(3, 18vmin);
	grid-gap: 1vmin;
}

.item	{
	background: rgba(255, 255, 255, 0.1);
	display: grid;
	place-items: center;
	border-radius: 4px;
	transition: opacity 0.4s ease;
}

.container:hover .item {
	opacity: 0.3;
}

.container:hover .item:hover {
	opacity: 1;
}

.page {
	margin: auto;
}

.header {
	margin-bottom: 4vmin;
}

.header-title {
	font-size: 3.75vmin;
}

.header-subtitle {
	font-size: 2vmin;
	text-transform: uppercase;
	opacity: 0.6;
}

html, body {
	display: flex;
	width: 100%;
	height: 100%;
	background-image: linear-gradient(to right top, #051937, #004d7a, #008793, #00bf72, #a8eb12);
	font-family: 'Noto Sans', sans-serif;
	color: white;
	text-align: center;
	letter-spacing: 0.3px;
}
    

يتم تعريف متغيرات CSS مثل --color و--size-mid لتسهيل التعديل على الألوان والأحجام.

يتم استخدام display: grid وplace-items: center لمركزة العناصر.

الرسوم المتحركة (Animations):
@keyframes kisnules-1 {
  100% {
    transform: rotate(1turn);
  }
}
  

يتم تعريف الرسوم المتحركة باستخدام @keyframes. على سبيل المثال، kisnules-1 يقوم بتدوير العنصر 360 درجة.

تطبيق الرسوم المتحركة على العناصر:
.kisnules.udes-1::before {
  width: var(--size-mid);
  height: var(--size-mid);
  border: 4px solid var(--color);
  border-top-color: transparent;
  border-radius: 50%;
  animation: kisnules-1 1s linear infinite;
}
  

يتم تطبيق الرسوم المتحركة على العناصر باستخدام ::before و::after.

يتم استخدام animation لتطبيق الرسوم المتحركة مع تحديد المدة ونمط التكرار.

تنسيقات الشبكة (Grid Layout):
.koneydesa {
  display: grid;
  grid-template-columns: repeat(3, 18vmin);
  grid-template-rows: repeat(3, 18vmin);
  grid-gap: 1vmin;
}
  

يتم استخدام تخطيط الشبكة (Grid) لترتيب العناصر في صفوف وأعمدة.

تأثيرات التمرير (Hover Effects):
.koneydesa:hover .item {
  opacity: 0.3;
}

.koneydesa:hover .item:hover {
  opacity: 1;
}
  

يتم إضافة تأثيرات عند تمرير الماوس فوق العناصر، حيث يتم تقليل شفافية العناصر غير المحددة وزيادة شفافية العنصر المحدد.

الخلاصة:

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

معاينــــة

🌟 انتبه عزيزي أعضاء المجتمع! 🌟
نحن متحمسون لمشاركتك في مناقشاتنا الديناميكية. لضمان بيئة محترمة وشاملة للجميع، نطلب تعاونكم مع الإرشادات التالية:
1. احترام الخصوصية: يرجى عدم مشاركة معلومات حساسة أو شخصية في تعليقاتك.
2. انشر الإيجابية: نحن نتمسك بسياسة عدم التسامح مطلقًا مع خطاب الكراهية أو اللغة المسيئة. دعونا نحافظ على محادثاتنا محترمة وودية.
3. اللغة المفضلة: لا تتردد في التعبير عن نفسك باللغة الإنجليزية أو العربية. ستساعدنا هاتان اللغتان في الحفاظ على مناقشة واضحة ومتماسكة.
4. احترام التنوع: لتعزيز جو شامل، نطلب منك بكل احترام تجنب مناقشة المسائل الدينية في تعليقاتك.
تذكر أن مساهماتك قيمة، ونحن نقدر التزامك بجعل مجتمعنا مكانًا ترحيبيًا للجميع. دعونا نواصل التعلم والنمو معًا من خلال المناقشات البناءة والاحترام المتبادل.
شكرًا لكونك جزءًا من مجتمعنا اوعي وشك! 🌟

إرسال تعليق