05 — אתר שנראה טוב עם Bootstrap


כרטיסים, רשת והתאמה לנייד; בסיס עובד גם למי שטרם השלים עיצוב אישי

נבנה אזור פתיחה וכרטיסים עם Bootstrap. נסדר את התוכן בעמודות ונבדוק שהאתר נוח לקריאה גם בטלפון.

הפרק הקודם: 04 — מעצבים עם CSS · הפרק הבא: 06 — שומרים גרסאות עם Git ומפרסמים ב־GitHub

במסך מגע אפשר להחליק ימינה לפרק הבא ושמאלה לפרק הקודם.

מה נלמד

  • להשתמש ב־container, row ו־col.
  • להרכיב card וכפתור.
  • לשלב מחלקות Bootstrap עם CSS אישי.

זה עדיין שלב התנסות לפני רישום הפרויקט השנתי. אפשר לעבוד בניסוי שבחרתם או ליצור ניסוי חדש בתיקייה נפרדת בעזרת 02 — מדריכי ההקמה. אם מתחילים מחדש, השלימו בו את שינויי השיעורים הקודמים הדרושים לדוגמאות שלפניכם. שמרו את הניסויים הקודמים; עדיין אין צורך לפרסם ל־GitHub.

פותחים ומריצים

פתחו את תיקיית הפרויקט שבה עבדתם, שמרו את הקבצים והריצו את האתר. בדקו שהשינוי מהמפגש הקודם מופיע לפני שמנסים שינוי חדש.

בונים בשלושה אזורים

אזור הפתיחה משתמש בשתי עמודות במסך גדול. אזור הכרטיסים משתמש בשלוש עמודות מ־md ומעלה; במסך צר הכרטיסים נערמים. g-4 קובע רווחים ו־h-100 משווה גובה. בחרו בכל פעם מחלקת Bootstrap אחת ושנו אותה כדי לראות מה היא עושה. קובצי Bootstrap כבר הגיעו עם תבנית Razor Pages ונמצאים בתיקיית wwwroot/lib/bootstrap; אין להוסיף ספרייה חדשה או לערוך אותה. התבנית טוענת אותם לפני wwwroot/css/site.css, ולכן את ההתאמות האישיות נוסיף בסוף site.css. גם התפריט העליון נשאר התפריט של התבנית.

השינויים בקוד

RazorTaba/Pages/Index.cshtml

בקובץ הקיים בצעו את השינוי הבא. סימני + ו־- מציינים שינוי ואינם חלק מהקוד:

 @model IndexModel
 @{
     ViewData["Title"] = "בית";
 }
-<section class="intro">
-<h1>החיות שלי</h1>
-<p>ברוכים הבאים לפינה שלי בטבע. נכיר חיות, נקרא עליהן ונלמד איך מטפלים בהן.</p>
-<h2>מה תמצאו כאן?</h2>
-<ul>
-    <li>חיות שיש להן סיפור</li>
-    <li>מדריכי טיפול קצרים</li>
-    <li>המלצות שלי להיכרות מקרוב</li>
-</ul>
-<a href="https://he.wikipedia.org/wiki/שועל">לקריאה על שועלים</a>
-<img src="~/images/fox.svg" alt="איור של שועל" width="180" />
+<section class="intro row g-4 align-items-center mx-0">
+    <div class="col-lg-8">
+        <p class="eyebrow">הפינה שלי בטבע</p>
+        <h1>לכל חיה יש סיפור.<br />בואו להכיר.</h1>
+        <p class="lead">מגלים, מתעדים ולומדים לטפל. אתר קטן עם מקום גדול לסקרנות.</p>
+        <a class="btn btn-light btn-lg" href="#meet">מכירים את החיות ↓</a>
+    </div>
+    <div class="col-lg-4 text-center">
+        <img class="hero-image" src="~/images/fox.svg" alt="איור שועל כתום" />
+    </div>
+</section>
+<section id="meet" class="py-5">
+    <p class="eyebrow">נפגשים מקרוב</p>
+    <h2 class="mb-4">שלוש חיות, שלושה סיפורים</h2>
+    <div class="row g-4">
+        <div class="col-md-4"><article class="card h-100"><div class="animal-art" aria-hidden="true">🦊</div><div class="card-body"><h3>נורי השועל</h3><p>סקרן, זריז ותמיד מוכן לגלות משהו חדש.</p></div></article></div>
+        <div class="col-md-4"><article class="card h-100"><div class="animal-art mint" aria-hidden="true">🐢</div><div class="card-body"><h3>תום הצב</h3><p>לא ממהר לשום מקום. יש הרבה מה ללמוד ממנו.</p></div></article></div>
+        <div class="col-md-4"><article class="card h-100"><div class="animal-art lilac" aria-hidden="true">🦉</div><div class="card-body"><h3>לונה הינשופה</h3><p>כשהשמש יורדת, הסיפור שלה רק מתחיל.</p></div></article></div>
+    </div>
 </section>

RazorTaba/wwwroot/css/site.css

בקובץ הקיים בצעו את השינוי הבא. סימני + ו־- מציינים שינוי ואינם חלק מהקוד:

 .intro { background: var(--forest); color: #fff; border-radius: 1.5rem; padding: 3rem; }
 .intro h1 { font-size: clamp(2rem, 6vw, 4rem); font-weight: 800; }
 .intro a { color: var(--accent); }
 footer { border-top: 1px solid #d8dfd3; margin-top: 3rem; color: var(--leaf); }
+
+.eyebrow { letter-spacing: .08em; font-weight: 700; font-size: .9rem; }
+.hero-image { width: min(100%, 17rem); transform: rotate(-5deg); border-radius: 2rem; }
+.card { border: 1px solid #d8dfd3; border-radius: 1.25rem; overflow: hidden; box-shadow: 0 .4rem 1.5rem #173f3508; }
+.animal-art { background: #fae5d3; font-size: 5rem; text-align: center; padding: 1.5rem; }
+.mint { background: #e1e9d9; }
+.lilac { background: #ebe3ee; }
+.btn { border-radius: .75rem; }
+.btn-primary { background: var(--forest); border-color: var(--forest); }
+.btn-primary:hover { background: var(--leaf); border-color: var(--leaf); }

מריצים ובודקים

  1. במסך רחב רואים שלושה כרטיסים בשורה.
  2. ברוחב טלפון הכרטיסים נערמים בלי גלילה אופקית.
  3. הכפתור גולל לאזור החיות.

משימה אישית ובדיקת הבנה

התאימו שלושה כרטיסים לנושא שלכם. החליפו תוכן קודם, ורק אחר כך צבעים. בדקו שהכרטיסים נשארים קריאים גם כשאורך הטקסט שונה.

בסיום שינוי: שמרו את הקבצים, בדקו את האתר בדפדפן והסבירו מה שיניתם. אפשר להמשיך בניסוי הזה או לתרגל שוב בפרויקט נפרד; רשמו היכן שמרתם כל ניסוי.

AI יכול לעזור להבין הודעת שגיאה ולנפות תקלה. אתם אחראים לכתוב, לבדוק ולהסביר את הקוד; אין להפעיל סוכן שיכתוב את הפרויקט.

בדיקת ניגודיות של הכפתור

בדקו את צבע הטקסט בכפתור הבהיר „מכירים את החיות”. הכלל .intro a חל גם עליו וצובע את הטקסט בצבע ההדגשה. כדי לקבל טקסט כהה על הרקע הבהיר, פתחו את wwwroot/css/site.css והוסיפו בסוף הקובץ, אחרי הכלל .btn-primary:hover, את ההערה ואת הכלל הממוקד שמופיעים כאן. השאירו את הכללים הקיימים במקומם.

 .btn { border-radius: .75rem; }
 .btn-primary { background: var(--forest); border-color: var(--forest); }
 .btn-primary:hover { background: var(--leaf); border-color: var(--leaf); }
+
+/* הכפתור הבהיר זקוק לטקסט כהה, גם כשהוא נמצא בתוך אזור הפתיחה. */
+.intro .btn-light { color: var(--forest); }

שמרו ורעננו את הדף. ודאו שהטקסט בכפתור הבהיר כהה וקריא ושהלחיצה עליו עדיין גוללת אל הכרטיסים. הכלל החדש חל רק על כפתור עם המחלקה btn-light שנמצא בתוך אזור עם המחלקה intro.

בשיעור הבא נבחר מתוך הניסויים אתר עובד להמשך ונרשום אותו כפרויקט השנתי. הכינו את תיקיית האתר שבחרתם, בדקו שהוא פועל ושאתם יודעים לזהות את קובצי התוכן והעיצוב שלו. עד לנקודת הרישום אפשר עדיין לנסות ולהתחיל מחדש; אחריה נפתח את אותו פרויקט ונשמור את רצף ההתקדמות שלו.


המשך