יצירה מחדש של אפקט הטקסט הקטוע של MDN PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

יצירה מחדש של אפקט הטקסט הקטוע של MDN

זה לא סוד ש- MDN הוציא עיצוב חדש עוד במרץ. זה משגע! ויש בו כמה פניני CSS-y מתוקות שכיף להסתכל בהן. אחת מהפנינים האלה היא האופן שבו רכיבי כרטיס מטפלים בטקסט קטום.

יצירה מחדש של אפקט הטקסט הקטוע של MDN

די מגניב, כן? אני רוצה לקרוע את זה רק קצת, אבל כמה דברים באמת מושכים אותי לגישה הזו:

  • זו דוגמה לניתוק תוכן בכוונה. התייחסנו לזה כאל אובדן נתונים של CSS במקומות אחרים. ולמרות שאובדן נתונים הוא בדרך כלל דבר רע, אני אוהב את השימוש בו כאן מכיוון שקטעים נועדו להוות טיזר לתוכן המלא.
  • זה שונה מחיתוך טקסט עם text-overflow: ellipsis, נושא שעלה די לאחרונה כאשר אריק אגרט משותף החששות שלו עם זה. הטענה העיקרית נגדה היא שאין דרך לשחזר את הטקסט שנחתך בחיתוך - טכנולוגיה מסייעת תכריז על כך, אבל למשתמשים רואים אין דרך לשחזר אותו. גישת MDNs מספקת קצת יותר שליטה במחלקה הזו מכיוון שהקטיעה היא חזותית בלבד.

אז איך MDN עשה את זה? שום דבר מפואר מדי כאן מבחינת ה-HTML, רק מיכל עם פסקה.

<div class="card">
  <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Inventore consectetur temporibus quae aliquam nobis nam accusantium, minima quam iste magnam autem neque laborum nulla esse cupiditate modi impedit sapiente vero?</p>
</div>

אנחנו יכולים להכניס כמה סגנונות בסיס כדי לחזק את הדברים.

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

.card p {
  max-height: calc(4rem * var(--base)); /* Set a cut-off point for the content */
  overflow: hidden; /* Cut off the content */
}

וואו וואו, מה נסגר עם זה calc() דברים? שימו לב שהקמתי א --base משתנה מלפנים שיכול לשמש כמכפיל משותף. אני משתמש בו כדי לחשב את font-size, line-height, padding עבור הכרטיס, ועכשיו את max-height של הפסקה. אני מוצא שקל יותר לעבוד עם ערכים קבועים במיוחד כאשר הגודל שאני צריך באמת מבוסס על קנה מידה כזה. שמתי לב ש-MDN משתמש בדומה --base-line-height משתנה, כנראה לאותה מטרה.

לגרום לשורת הטקסט השלישית הזו לדעוך? זה קלאסי linear-gradient() על הסעיף :after פסאודו-אלמנט, המוצמד לפינה הימנית התחתונה של הכרטיס. אז אנחנו יכולים להגדיר את זה:

.card p:after {
  content: ""; /* Needed to render the pseudo */
  background-image: linear-gradient(to right, transparent, var(--background) 80%);
  position: absolute;
  inset-inline-end: 0; /* Logical property equivalent to `right: 0` */
}

שימו לב שאני מתקשר א --background משתנה שמוגדר לאותו ערך צבע הרקע שבו נעשה שימוש ב- .card עצמו. כך נראה שהטקסט נמוג אל הרקע. וגיליתי שאני צריך להתאים את עצירת הצבע השנייה במעבר הדרגתי מכיוון שהטקסט אינו מוסתר לחלוטין כאשר השיפוע מתערבב עד 100%. מצאתי 80% להיות נקודה מתוקה לעיניים שלי.

וכן, :after צריך height ו width. ה height איפה זה --base משתנים חוזרים לפעולה כי אנחנו רוצים את זה בקנה מידה של הפסקה line-height על מנת לכסות את הטקסט בגובה של :after.

.card p:after {
  /* same as before */
  height: calc(1rem * var(--base) + 1px);
  width: 100%; /* relative to the .card container */
}

נראה שהוספת פיקסל נוסף אחד של גובה עשתה את העבודה, אבל MDN הצליחה להוציא אותו בלעדיו כשהצצתי ב-DevTools. אז שוב, אני לא משתמש top (אוֹ inset-block-start) כדי לקזז את השיפוע גם בכיוון זה. 🤷‍♂️

עכשיו p:after ממוקמת לחלוטין, עלינו להכריז במפורש על מיקום יחסי בפסקה שיש לשמור :after בזרימה שלו. אחרת, :after ייגרר לחלוטין מזרם המסמכים ויתגלגל מחוץ לכרטיס. זה הופך ל-CSS המלא עבור .card פסקה:

.card p {
  max-height: calc(4rem * var(--base)); /* Set a cut-off point for the content */
  overflow: hidden; /* Cut off the content */
  position: relative; /* needed for :after */
}

סיימנו, נכון? לא! שיפוע הדאנג פשוט לא נראה במיקום הנכון.

אני מודה שהפלצתי במוח על זה והפעלתי DevTools ב-MDN כדי לראות מה לעזאזל אני מפספס. הו כן, :after צריך להיות מוצג כרכיב בלוק. ברור כשמש כשמוסיפים לו גבול אדום.🤦‍♂️

.card p:after {
  content: "";
  background: linear-gradient(to right, transparent, var(--background) 80%);
  display: block;
  height: calc(1rem * var(--base) + 1px);
  inset-block-end: 0;
  position: absolute;
  width: 100%;
}

כולם ביחד עכשיו!

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

יצירה מחדש של אפקט הטקסט הקטוע של MDN PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.
יצירה מחדש של אפקט הטקסט הקטוע של MDN

שמתי לב גם שהיישום של MDN מסיר pointer-events החל מ- p:after. כנראה טקטיקה הגנתית טובה כדי למנוע התנהגויות מוזרות בעת בחירת טקסט. הוספתי אותו והבחירה בטקסט מרגישה קצת יותר חלקה, לפחות בספארי, פיירפוקס וכרום.

בול זמן:

עוד מ טריקים של CSS