يقترح مؤلف المقالة ، الذي ننشر ترجمته اليوم ، باستخدام CSS خالص ، لإنشاء آلية لتغيير لون نص الرابط عند المرور فوقه. ولكن لا ينبغي أن يكون هذا تغييرًا عاديًا في اللون. يجب أن يملأ اللون الجديد الرابط من اليسار إلى اليمين ، ليحل محل اللون القديم.للقيام بذلك ، يمكنك اللجوء إلى إحدى الطرق الأربع الموضحة في هذه المادة. ضع في اعتبارك هذه الطرق ، مع إيلاء اهتمام خاص لأشياء مهمة مختلفة مثل إمكانية الوصول إلى المحتوى ، وأداء الحل ، ودعم المتصفح.الطريقة # 1: استخدام مقطع الخلفية: النص
في وقت كتابة هذه السطور ، كان مقطع الخلفية: خاصية النص تجريبية. لا يتم دعمه في Internet Explorer 11 والإصدارات الأحدث. تتضمن هذه الطريقة إنشاء ما يسمى " نص الضربة القاضية " (النص الذي يبدو أنه مقطوع على سطح معين والخلفية شفافة منه) مع تدرج حاد . يتكون ترميز HTML من عنصر واحد <a>
يصف ارتباط تشعبي.<a href="#">Link Hover</a>
لنبدأ بإنشاء أنماط للرابط. overflow: hidden
سيؤدي الاستخدام إلى حقيقة أنه عند تغيير مظهر الارتباط ، يتم قطع كل ما يتجاوز نطاق هذا العنصر.a {
position: relative;
display: inline-block;
font-size: 2em;
font-weight: 800;
color: royalblue;
overflow: hidden;
}
سنحتاج إلى استخدام تدرج خطي حاد بقيمة 50٪ لألوان البداية والنهاية للرابط.a {
background: linear-gradient(to right, midnightblue, midnightblue 50%, royalblue 50%);
}
استخدم الخاصية background-clip
لقص التدرج. دعنا نعطيه قيمة text
لعرض النص. سوف نستخدم خصائص background-size
و background-position
. يتم ذلك لعرض اللون الأولي.a {
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-size: 200% 100%;
background-position: 100%;
}
وأخيرًا ، أضف خاصية CSS إلى النمط والنمط transition
للفئة الزائفة للارتباط التشعبي :hover
. لكي يملأ اللون الجديد الرابط من اليسار إلى اليمين عند التمرير فوق الارتباط ، استخدم الخاصية background-position
.a {
transition: background-position 275ms ease;
}
a:hover {
background-position: 0 100%;
}
هنا مثال على CodePen. ورغم أن هذا الأسلوب يسمح لك لتحقيق التأثير المطلوب، وسفاري وكروم قلص عناصر النص والظل. هذا يعني أنها لن تظهر. لن يعمل تطبيق أنماط النص ، مثل تسطير النص باستخدام خاصية CSS text-decoration
. لذلك ، إذا كنت تريد تسطير الروابط ، فيجب عليك التفكير في طرق أخرى لتخصيص التسطير .الطريقة رقم 2: تطبيق العرض / الارتفاع
تعتمد هذه الطريقة على استخدام سمة البيانات * التي تحتوي على نفس النص مثل العلامة <a>
. هنا تستخدم إدارة الممتلكات width
(لملء الرابط باللون من اليسار إلى اليمين أو من اليمين إلى اليسار) أو الملكية height
(لتطبيق التأثير من أعلى إلى أسفل أو من أسفل إلى أعلى). على سبيل المثال ، في حالتنا ، يتم تطبيق تأثير على خاصية width
، والتي عندما تقوم بتمرير الماوس فوق ارتباط ، تتغير من 0 إلى 100٪. فيما يلي الترميز:<a href="#" data-content="Link Hover">Link Hover</a>
تشبه CSS تلك المستخدمة في المثال السابق ، باستثناء إعدادات خاصية الخلفية. هنا ، بالإضافة إلى ذلك ، ستعمل الخاصية بشكل جيد text-decoration
:a {
position: relative;
display: inline-block;
font-size: 2em;
color: royalblue;
font-weight: 800;
text-decoration: underline;
overflow: hidden;
}
هذا هو المكان الذي نحتاج فيه إلى استخدام النص من السمة data-content
. سيتم وضع هذا النص أعلى محتوى العلامة <a>
. يمكننا استخدام حيلة صغيرة مثيرة للاهتمام هنا ، والتي تتكون من نسخ نص من سمة واشتقاقها باستخدام وظيفة attr()
في خاصية content
عنصر زائف للارتباط ::before
.a::before {
position: absolute;
content: attr(data-content);
top: 0;
left: 0;
color: midnightblue;
text-decoration: underline;
overflow: hidden;
transition: width 275ms ease;
}
لكي لا ينتقل النص إلى سطر جديد ، سيتم تطبيق نمط على العنصر الزائف white-space: nowrap
. لتغيير لون الارتباط ، قم بتعيين قيمة خاصية CSS color
للعنصر الزائف واجعله ::before
بحيث تكون قيمة الخاصية في البداية width
0:a::before {
width: 0;
white-space: nowrap;
}
قم بزيادة قيمة width
العنصر الزائف ::before
إلى 100٪ لتطبيق التأثير عند التمرير فوق رابط الماوس:a:hover::before {
width: 100%;
}
هنا هو مثال على تطبيق هذه الطريقة على الرغم من أننا، بناء على خصائص العنصر width
و height
تحقيق ما نحتاج إليه، وهذا الأسلوب هو ملحوظ لفي انخفاض الإنتاجية . للحصول على تغيير سلس للون بمعدل 60 إطارًا في الثانية - من الأفضل استخدام الخصائص transform
أو. يسمح لك استخدام opacity
الخاصية text-decoration
باستخدام أنماط مختلفة للتأكيد على النص في الروابط المتحركة. هنا مثال يوضح هذا ، تم إنشاؤه باستخدام التقنية الثالثة ، التي سننظر فيها الآن. وهو يعتمد على استخدام خاصية CSS لمسار المقطع .الطريقة الثالثة: استخدام مسار القصاصة
هنا سنستخدم خاصية CSS clip-path
والمضلع ، في هذه الحالة ، المستطيل. يحتوي المستطيل على أربع زوايا ، ويزيد طول جانبين عند تحريك الماوس فوق الرابط. يتوسع الشكل ، ينتقل أحد جانبيه من اليسار إلى اليمين.يستخدم الترميز نفسه كما في المثال السابق:<a href="#" data-content="Link Hover">Link Hover</a>
سنستخدم ، مرة أخرى ، العنصر الزائف ::before
. لكن CSS مختلفة هنا:a::before {
position: absolute;
content: attr(data-content);
color: midnightblue;
text-decoration: underline;
clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);
transition: clip-path 275ms ease;
}
بخلاف الطريقة السابقة ، text-decoration: underline
يجب هنا تعيين الخاصية للعنصر الزائف ::before
. يعد ذلك ضروريًا حتى لا يؤثر تغيير اللون على نص الرابط فقط ، بل يؤثر أيضًا على الخط الذي يبرز الرابط. فلنلقِ الآن نظرة على رمز CSS الخاص بالموقع clip-path
:clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);
يتم تحديد مواقع رؤوس المضلع في الخاصية clip-path
كنسبة مئوية ، وهي تحدد الإحداثيات بالترتيب المقابل لموضعها على المضلع:0 0
= الزاوية اليسرى العليا0 0
= الزاوية اليمنى العليا0 100%
= الزاوية اليمنى السفلى0 100%
= الزاوية اليسرى السفلى
يمكن تغيير اتجاه تطبيق تأثير التعبئة بتعديل الإحداثيات. الآن بعد أن عرفنا الإحداثيات ، يمكننا جعل الشكل ينمو عن طريق الانتقال من اليسار إلى اليمين عند التمرير فوق رابط الماوس:a:hover::before {
clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
}
في ما يلي نسخة فعالة من هذا المثال. تعمل تقنية ألوان الوان الرسوم المتحركة بشكل جيد للغاية ، ولكن قبل استخدامه ، ضع في اعتبارك دعم الخاصية في clip-path
متصفحات مختلفة. إنشاء انتقالات CSS باستخدام clip-path
أفضل من استخدام تقنية الارتفاع / العرض. ومع ذلك ، يؤدي استخدامه إلى حقيقة أن المستعرض يقوم بعمليات طلاء ( موارد) كثيفة الاستخدام للموارد .الطريقة الرابعة: استخدام التحويل
يستخدم الترميز المستخدم هنا تقنية إخفاء العناصر <span>
. نظرًا لأننا سنستخدم <span>
المحتوى الذي يكرر محتوى الرابط في العنصر ، فسوف نستخدم السمة لتحسين توفر المحتوى aria-hidden="true"
. سيؤدي هذا إلى إخفاء النص المتكرر من برامج قراءة الشاشة.لن يتم التعبير عن هذا النص مرتين:<a href="#"><span data-content="Link Hover" aria-hidden="true"></span>Link Hover</a>
يحتوي CSS للعنصر <span>
على وصف للانتقال ، الذي يبدأ على اليسار:span {
position: absolute;
top: 0;
left: 0;
overflow: hidden;
transform: translateX(-100%);
transition: transform 275ms ease;
}
تحتاج الآن إلى تنظيم حركة العنصر <span>
إلى اليمين ، كما هو موضح أدناه.للقيام بذلك ، استخدم ::before
العنصر الزائف العنصر <span>
. وكما كان الحال من قبل ، سنلجأ إلى استخدام السمة data-content
. دعونا نغير موضع العنصر ، بتطبيق التحول transform: translateX(100%)
، وتحريكه على طول المحور X
.span::before {
display: inline-block;
content: attr(data-content);
color: midnightblue;
transform: translateX(100%);
transition: transform 275ms ease;
text-decoration: underline;
}
كما هو الحال مع العنصر <span>
، ::before
سيتم تعيين موضع العنصر الزائف باستخدام البناء transform: translateX(0)
:a:hover span::before {
transform: translateX(0);
}
في ما يلي مثال على CodePen. على الرغم من أن هذه الطريقة تتمتع بأفضل دعم عبر المتصفح لما سبق ، إلا أنها تحتاج إلى المزيد من HTML و CSS لتنفيذه. ومع ذلك ، فإن استخدام خصائص CSS transform
لا يضر بالأداء ، ولا يؤدي استخدامه إلى إعادة رسم العناصر ، ونتيجة لذلك ، يؤدي إلى تكوين انتقالات CSS سلسة بمعدل 60 إطارًا في الثانية.ملخص
لقد اطلعنا للتو على أربع طرق مختلفة لتحقيق نفس التأثير باستخدام CSS. على الرغم من أن كل واحد منهم له إيجابياته وسلبياته ، يمكنك أن ترى أنه لا يوجد شيء مستحيل في تنظيم الرسوم المتحركة للون نص الروابط عند المرور فوقها. هذا تأثير لطيف صغير ، يؤدي استخدامه إلى حقيقة أن الروابط تعتبر أكثر تفاعلية.القراء الأعزاء! هل تحرك الروابط في مشاريعك؟