תכונות CSS הקשורות לשקיפות
מאמר זה מסביר את תכונות ה-CSS הקשורות לשקיפות.
ניתן ללמוד על השימוש והתחביר של תכונות opacity, z-index ו-clip-path.
YouTube Video
HTML לתצוגה מקדימה
css-opacity.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <title>CSS Properties Example</title>
7 <link rel="stylesheet" href="css-base.css">
8 <link rel="stylesheet" href="css-opacity.css">
9</head>
10<body>
11 <!-- Header -->
12 <header>
13 <h1>CSS Properties Related to Transparency</h1>
14 </header>
15
16 <!-- Main content -->
17 <main>
18 <header>
19 <h2>CSS Properties Related to Transparency</h2>
20 </header>
21 <article>
22 <h3>opacity</h3>
23 <section>
24 <header><h4>opacity: 1</h4></header>
25 <section class="sample-view">
26 <div class="opaque-box">Opaque</div>
27 </section>
28 <header><h4>opacity: 0.5</h4></header>
29 <section class="sample-view">
30 <div class="semi-transparent-box">Semi-transparent</div>
31 </section>
32 <header><h4>opacity: 0</h4></header>
33 <section class="sample-view">
34 <div class="transparent-box">Transparent</div>
35 </section>
36 <header><h4>transition: opacity 2s ease-in-out</h4></header>
37 <section class="sample-view">
38 <div class="opacity-transition-box">Opacity with Transition (Fade out on hover)</div>
39 </section>
40 <header><h4>Parent & Child Element</h4></header>
41 <section class="sample-view">
42 <div class="opacity-parent">
43 Parent Element & <span class="opacity-child">Child Element</span>
44 </div>
45 </section>
46 </section>
47 </article>
48 <article>
49 <h3>z-index</h3>
50 <section>
51 <div class="z-index-box1">1</div>
52 <div class="z-index-box2">
53 <div class="z-index-box2-1">2-1</div>
54 2
55 </div>
56 <div class="z-index-box3">3</div>
57 </section>
58 </article>
59 <article>
60 <h3>clip-path</h3>
61 <section>
62 <h4>Clip-path Property Examples</h4>
63 <header><h4>clip-path: circle(50% at 50% 50%)</h4></header>
64 <section class="sample-view">
65 <div class="clip-path-circle">Circle</div>
66 </section>
67 <header><h4>clip-path: ellipse(50% 30% at 50% 50%)</h4></header>
68 <section class="sample-view">
69 <div class="clip-path-ellipse">Ellipse</div>
70 </section>
71 <header><h4>clip-path: polygon(50% 0%, 100% 100%, 0% 100%)</h4></header>
72 <section class="sample-view">
73 <div class="clip-path-polygon">Polygon</div>
74 </section>
75 <header><h4>clip-path: inset(10% 20% 30% 40%)</h4></header>
76 <section class="sample-view">
77 <div class="clip-path-inset">Inset</div>
78 </section>
79 <header><h4>clip-path: url(#myClip)</h4></header>
80 <section class="sample-view">
81 <div class="clip-path-url">Url</div>
82 </section>
83 </section>
84 <svg width="0" height="0">
85 <clipPath id="myClip">
86 <circle cx="50" cy="50" r="40" />
87 </clipPath>
88 </svg>
89 </article>
90 </main>
91</body>
92</html>אפקטים של סינון
תכונת opacity
1.opaque-box {
2 background-color: skyblue;
3 opacity: 1; /* completely opaque */
4 border: 1px solid black;
5}
6
7.semi-transparent-box {
8 background-color: skyblue;
9 opacity: 0.5; /* semi-transparent */
10 border: 1px solid black;
11}
12
13.transparent-box {
14 background-color: skyblue;
15 opacity: 0; /* completely transparent */
16 border: 1px solid black;
17}
18
19.opacity-transition-box {
20 background-color: orange;
21 transition: opacity 2s ease-in-out;
22 border: 1px solid black;
23}
24
25.opacity-transition-box:hover {
26 opacity: 0; /* Fade out on hover */
27}
28
29.opacity-parent {
30 background-color: blue;
31 opacity: 0.5;
32}
33
34.opacity-child {
35 background-color: red;
36}תכונת opacity משמשת לקביעת השקיפות של אלמנט. תכונה זו קובעת את רמת השקיפות של האלמנט כולו, כאשר ערכים קרובים ל-0 הם יותר שקופים וערכים קרובים ל-1 הם פחות שקופים. ניתן לשלב את תכונת opacity עם אנימציות כדי ליצור אפקטים של הבהרה והכהיה.
תכונת opacity משפיעה לא רק על האלמנט עליו היא הוגדרה אלא גם על האלמנטים הצאצאים שלו. משמעות הדבר היא שאם אלמנט אב מוגדר להיות חצי-שקוף, האלמנטים הצאצאים שלו יירשו את השקיפות הזו.
בדוגמה זו, ההגדרות מוגדרות כך:.
-
כאשר הערך של תכונת
opacityהוא1, הפריט אטום לחלוטין, כמו כל אלמנט רגיל. -
כאשר הערך של תכונת
opacityהוא0.5, הפריט הופך לחצי שקוף. -
כאשר הערך של תכונת
opacityהוא0, הפריט הופך לשקוף לגמרי ואינו נראה בכלל. -
תכונת
transitionמוגדרת כ־opacity, לכן כאשר סמן העכבר עובר מעל האלמנט, הוא נעלם בהדרגה והופך שקוף לחלוטין לאחר שתי שניות. -
אם לאלמנט האב יש תכונת
opacityבערך של0.5, גם אלמנטים הבן יהפכו לחצי שקופים.
תכונת z-index
1.z-index-box1 {
2 position: relative;
3 width: 100px;
4 height: 100px;
5 background-color: red;
6 top: 10px;
7 left: 10px;
8 z-index: 1; /* Displayed in the foreground */
9}
10
11.z-index-box2 {
12 position: relative;
13 width: 100px;
14 height: 100px;
15 background-color: blue;
16 top: -100px;
17 left: 90px;
18 z-index: 0; /* Displayed in the background */
19}
20
21.z-index-box3 {
22 position: relative;
23 width: 100px;
24 height: 100px;
25 background-color: green;
26 top: -160px;
27 left: 80px;
28 z-index: 2; /* Displayed in the frontmost layer */
29}
30
31.z-index-box2-1 {
32 position: relative;
33 width: 50px;
34 height: 50px;
35 background-color: skyblue;
36 top: 0px;
37 left: 0px;
38 z-index: 4;
39}תכונת z-index משמשת ב-CSS לשליטה על סדר הערימה של האלמנטים. תכונה זו קובעת האם אלמנט מסוים יופיע לפני או מאחורי אלמנטים אחרים.
- בקופסה האדומה, הערך של
z-indexהוא1, ולכן האלמנט מופיע לפני כל שאר האלמנטים. - בקופסה הכחולה, הערך של
z-indexהוא0, ולכן האלמנט מופיע מאחורי הקופסה האדומה. - בקופסה הירוקה, הערך של
z-indexהוא2, והיא מופיעה במיקום הקדמי ביותר. - בקופסה התכלת, מוקצה ערך
z-indexהגבוה ביותר -4, אך מכיוון שלאלמנט האב יש ערך של0, היא אינה מופיעה במיקום הקדמי ביותר.
מנגנון בסיסי
מאפיין z-index מקבל ערך מספרי, כאשר אלמנטים עם מספרים גבוהים יותר מוצגים לפני אלה עם מספרים קטנים יותר. כברירת מחדל, אלמנטים ללא z-index מוגדר נערמים לפי הסדר בו הם מופיעים ב-HTML.
עם זאת, כדי שמאפיין z-index יפעל, יש להגדיר את מאפיין position של האלמנט ל-relative, absolute, fixed, או sticky. אם המאפיין position הוא static, אז ל-z-index אין השפעה.
ערכים
-
אם הוגדר מספר שלם חיובי ל-
z-index, האלמנט יוצג יותר קדימה. ככל שהמספר גדול יותר, כך האלמנט יוצג יותר לפני אלמנטים אחרים.- אם
z-indexמוגדר כ-0, הוא שומר על סדר הערימה המוגדר כברירת מחדל. - אם
z-indexמוגדר ל-1, האלמנט יוצג שכבה אחת לפני אלמנטים אחרים.
- אם
-
אם הוגדר מספר שלם שלילי ל-
z-index, האלמנט יוצג יותר אחורה. ככל שהמספר קטן יותר, כך האלמנט יוצג יותר מאחורי אלמנטים אחרים.- אם
z-indexמוגדר ל--1, האלמנט יוצג שכבה אחת מאחורי אלמנטים אחרים.
- אם
הערות
- הערך של
z-indexתלוי בערךz-indexשל אלמנט האב. כאשר לאלמנט האב ישz-indexמוגדר, סדר הערימה היחסי בתוך אותו אלמנט אב מיושם. זה נקרא 'הקשר ערימה' או 'stacking context'. לכן, גם אם אלמנט ילד יש לוz-indexגבוה, אם הערך שלz-indexשל אלמנט האב נמוך, הוא לא יופיע לפני אלמנטים אחרים.
מאפיין clip-path
מאפיין ה-CSS clip-path משמש לחתוך אלמנטים לצורות מסוימות. בדרך כלל, אלמנטים מוצגים כתיבות מלבניות, אבל עם clip-path, אפשר להציג אלמנטים בצורות מורכבות כמו עיגולים או מצולעים. זהו כלי מאוד שימושי ליצירת עיצובים חזותיים או אפקטים אינטראקטיביים.
מאפיין clip-path מגביל את שטח התצוגה של האלמנט ומסתיר את החלקים שמחוץ לצורה המוגדרת. בהמשך, נסביר כיצד להגדיר צורות נפוצות לשימוש.
צורות חיתוך עיקריות
circle()
1.clip-path-circle {
2 width: 100px;
3 height: 100px;
4 background-color: green;
5 clip-path: circle(50% at 50% 50%);
6}circle() חותך אלמנט לצורה מעגלית. באפשרותך לשלוט בצורה על ידי ציון המרכז והרדיוס של המעגל.
- ה-
50%הראשון הוא רדיוס המעגל (כאחוז מרוחב או גובה האלמנט). - ה-
at 50% 50%לאחר מכן הוא מיקום המרכז של המעגל (כאחוז מרוחב וגובה האלמנט).
כאן, מוגדר מעגל עם רדיוס שהוא חצי ממידות האלמנט, שממוקם במרכז האלמנט.
ellipse()
1.clip-path-ellipse {
2 width: 100px;
3 height: 100px;
4 background-color: green;
5 clip-path: ellipse(50% 30% at 50% 50%);
6}ellipse() גוזר אלמנט לצורה אליפטית. יש לציין את הרדיוסים של הרוחב והגובה, כמו גם את מיקום המרכז.
- ה-
50% 30%הראשונים הם הרדיוסים של הרוחב והגובה. - ה-
at 50% 50%לאחר מכן הוא מיקום המרכז של האליפסה.
בדוגמה זו, מוגדרת אליפסה שממוקמת במרכז האלמנט, עם רוחב של 50% וגובה של 30%.
polygon()
1.clip-path-polygon {
2 width: 100px;
3 height: 100px;
4 background-color: green;
5 clip-path: polygon(50% 0%, 100% 100%, 0% 100%);
6}polygon() יוצר מצולע על ידי חיבור קבוצת קודקודים שנקבעה. כל קודקוד מוגדר עם קואורדינטות יחסיות בתוך האלמנט.
- בדוגמה זו, נקבעו שלושה קודקודים (מרכז עליון, ימין תחתון, שמאל תחתון) והצורה נגזרת למשולש.
polygon()הוא מאוד גמיש ויכול ליצור כל צורה.
inset()
1.clip-path-inset {
2 width: 100px;
3 height: 100px;
4 background-color: green;
5 clip-path: inset(10% 20% 30% 40%);
6}inset() גוזר פנימה מהקצוות החיצוניים של אלמנט. יש להגדיר מלבן על ידי ציון המרחק מכל אחד מארבעת הצדדים.
- ה-
10%הוא המרחק מהקצה העליון. - ה-
20%הוא המרחק מהקצה הימני. - ה-
30%הוא המרחק מהקצה התחתון. - ה-
40%הוא המרחק מהקצה השמאלי.
מפרט זה יוצר מלבן שמצטמצם בתוך האלמנט.
clip-path באמצעות SVG
1/*
2<svg width="0" height="0">
3 <clipPath id="myClip">
4 <circle cx="50" cy="50" r="40" />
5 </clipPath>
6</svg>
7*/
8.clip-path-url {
9 width: 100px;
10 height: 100px;
11 background-color: green;
12 clip-path: url(#myClip);
13}ה-clip-path של CSS יכול לשמש לא רק לצורות פרימיטיביות אלא גם לגזירת צורות מורכבות באמצעות אלמנט <clipPath> של SVG.
- בדוגמה זו, מסלול חיתוך עגול שהוגדר ב־SVG עם מזהה
myClip, מוחל על אלמנט HTML.
תוכלו לעקוב אחר המאמר שלמעלה באמצעות Visual Studio Code בערוץ היוטיוב שלנו. נא לבדוק גם את ערוץ היוטיוב.