Стрічковий банер на чистому CSS

26

Від автора: Час від часу я ставлю собі завдання щодо розробки, які можуть бути не цілком реалістичними, для того, щоб перевірити, чи зможу я їх виконати. Це допомагає мені рости як розробнику, з двох причин – мені потрібно проявляти творчий підхід і тому, що це, як правило, вимагає якихось досліджень. Сьогодні стоїть завдання: створити стрічковий банер на чистому css і html. Ніяких картинок.

Створення візуальних елементів без картинок – це не тільки гарна ідея, але і швидко стає необхідністю. З зростанням популярності екранів «ретина» та їм подібним, растрові зображення виходять з використання в інтерфейсі, тому що вони жахливо виглядають на екранах з високою роздільною здатністю. У деяких ситуаціях без зображень важко обійтися та SVG (масштабована векторна графіка) швидко стає основним форматах в таких випадках. Однак, там, де ми можемо уникнути використання картинок як таких, ми не тільки отримуємо красивий, чітко окреслений елемент, але і уникаємо зайвого запиту на сервер. Так що давайте ж з ними розберемося.

Застереження: якщо ви новачок в CSS, рекомендую ознайомитись із наступними темами, до того як ви повторіть те, що описано нижче:

CSS псевдо-елементи (зокрема :before :after)

CSS3 елементи, такі як box-shadow і box-sizing

Абсолютне і відносне позиціонування дівов

Ось так виглядає розмітка.

here’s your link

В тому, що ви бачите вище, немає нічого складного. Дів з класом «.content-box» містить весь контент. У діві з ідентифікатором «#ribbon-container» знаходиться посилання і дозволяє нам поставити позиціонування і частина тіні банеру. Посилання – основний елемент вашого банера.

Все зрозуміло? Ну що ж, перейдемо до CSS.

* {
padding: 0; /* Стандартний скидання стилів і ми додаємо box-sizing:border-box */
margin: 0;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
.content-box {
width: 100%; /* передбачається, що цей елемент міститься в контейнері з заданою шириною */
height: 400px;
margin: 0 auto;
position: relative; /* для того щоб ми змогли позиціонувати банер в межах контейнера */
background: gray;
border: 5px solid white;
box-shadow: 0 0 10px rgba(0,0,0,.3);
-moz-box-shadow: 0 0 10px rgba(0,0,0,.3);
-webkit-box-shadow: 0 0 10px rgba(0,0,0,.3);
}
#ribbon-container {
position: absolute;
top: 15px;
right: -20px;
overflow: visible; /* щоб ми могли побачити псевдо-елементи */
font-size: 18px; /* розмір шрифту і висота рядка повинні бути однаковими, оскільки вони впливають на висоту */
line-height: 18px;
}
#ribbon-container:before {
content:»»;
height: 0;
width: 0;
display: block;
position: absolute;
top: 3px;
left: 0;
border-top: 29px solid rgba(0,0,0,.3); /* ці 4 кордону створюють першу частину нашої тіні */
border-bottom: 29px solid rgba(0,0,0,.3);
border-right: 29px solid rgba(0,0,0,.3);
border-left: 29px solid transparent;
}
#ribbon-container:after { /* це створює другу частину нашої тіні */
content:»»;
height: 3px;
background: rgba(0,0,0,.3);
display: block;
position: absolute;
bottom: -3px;
left: 58px;
right:3px;
}
#ribbon-container a {
display:block;
padding:20px;
position:relative; /* дозволяє нам позиціонувати псевдоелементи */
background:#0089d0;
overflow:visible;
height:58px;
margin-left:29px;
color:#fff;
text-decoration:none;
}
#ribbon-container after a: { /* це створює вигин нашої стрічки */
content:»»;
height: 0;
width: 0;
display:block;
position:absolute;
bottom:-15px;
right:0;
border-top: 15px solid #004a70;
border-right: 15px solid transparent;
}
#ribbon-container a:before { /* тут задаються куточки країв стрічки */
content:»»;
height: 0;
width: 0;
display:block;
position:absolute;
top:0;
left:-29px;
border-top: 29px solid #0089d0;
border-bottom: 29px solid #0089d0;
border-right: 29px solid transparent;
border-left: 29px solid transparent;
}
#ribbon-container a:hover {
background:#009ff1;
}
#ribbon-container a:hover:before { /* код змінюють колір куточків стрічки по наведенню миші */
border-top: 29px solid #009ff1;
border-bottom: 29px solid #009ff1;
}

По-перше, ми використовуємо універсальний селектор, щоб скинути стилі, а також додати box-sizing:border-box до нашої сторінці. Це дозволить задавати зовнішні і внутрішні відступи (margin, padding) і ширину і не вести розрахунки щодо зміни розмірів елементів.

Потім ми додаємо візуальні стилі, до елементу, який містить стрічку, і самій стрічці. Знову, нічого складного.
Важливі речі, на які варто звернути увагу, це ті, що відносяться до псевдоелемент :before :after. Це ті техніки, які допомагають нам уникнути використання зображень в нашій стрічці. І на цьому все. Стрічковий банер на чистому CSS і ніяких картинок.

Тут можна подивитися демо.