Кросбраузерна верстка css. Кросбраузерна сумісність: адаптивний веб-дизайн для старих браузерів. Проблеми в застарілих браузерах та різні підходи до розробки
Доброго дня, союзники!
Мені, як верстальнику, доводиться щодня стикатися з різними CSS3 властивостями, які, хочеться мені чи ні, доводиться використовувати так, щоб вони коректно відображалися у всіх сучасних та несучасних браузерах. Зрозуміло, у мене зібралася якась бібліотека, яку я використовую при верстці різних проектів. Збирав я свою колекцію, з різних ресурсів та форумів, на безмежних просторах мережі Інтернет, тож не дивно, якщо хтось уже стикався з чимось окремо.
Можливо досвідченим представникам нашої професії цей пост буде не цікавий, але молодшим і недосвідченим він може стати в нагоді. Від старших товаришів, у свою чергу, хотілося б отримати коментарі, з недоліків, які, можливо, тут є, і важливим моментам, які, навпаки, можуть бути відсутніми.
Для коректної роботи CSS3 у всіх браузерах доводиться використовувати деякі зовнішні бібліотеки.
Власне, після всіх приготувань можна переходити безпосередньо до властивостей CSS3, над якими ми будемо знущатися.
Закруглені краї або border-radius
.border-radius ( border-radius: 10px; background-clip: padding-box; behavior: url(PIE.htc); )Властивість background-clip: padding-box; виключає можливість того, що картинка на задньому фоні залізатиме на наші закруглені області.
Рядок behavior: url(PIE.htc); підключає наш PIE файл, для підтримки цієї властивості IE.
Тінь блоку або box-shadow
.box-shadow( box-shadow: 3px 3px 4px #444; filter: progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color="#444444"); behavior: url(PIE.htc); )Властивості filter: progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color="#444444"); використовуються для IE.
Градієнт на фоні або background: linear-gradient()
.gradient( background-color: #444444; background: -webkit-linear-gradient(top, #444444, #999999); background: linear-gradient(to bottom, #444444, #999999); filter: progid:DXImageTransform. Microsoft.gradient(GradientType=0,startColorstr="#81a8cb", endColorstr="#4477a1"); ;)Подвійне заднє тло або background: url(), url();
.multiple-background( background: url(back1.png) 0 0 no-repeat, url(back2.png) 0 0 no-repeat; -pie-background: url(back1.png) 0 0 no-repeat, url( back2.png) 0 0 no-repeat; behavior: url(PIE.htc);Сучасні браузери начебто всі розуміють, а для IE знову використовуємо PIE.
Зображення замість обведення або border-image: url();
.border-image( -webkit-border-image: url("image.png") 30 round round; border-image: url("image.png") 30 round round; behavior: url(PIE.htc); )Тут властивість behavior не працюватиме в IE10.
Тінь тексту або text-shadow
На цьому принади PIE закінчуються. Для використання тіні тексту в IE необхідно використовувати вищезгадану бібліотеку jQuery.textshadow.Для використання, необхідно, для початку, в стилях вказати нашу тінь, для звичайних браузерів
.text-shadow( text-shadow: 1px 1px 3px #000; )
А потім, за допомогою бібліотеки, просимо незвичайні браузери IE нас зрозуміти
попередньо, не забуваючи, підключити цю бібліотеку та все, що необхідно, для її роботи.
Алгоритм розрахунку ширини та висоти елемента (так, саме такий переклад) або box-sizing
.box-sizing( -moz-box-sizing: border-box; box-sizing: border-box; )На жаль дана властивістьне працюватиме в браузерах IE7 і молодше. на Наразія не знайшов коректного вирішення цього питання, але це зовсім не означає, що його не існує.
Ставимо блоки в лінію або display: inline-block
Прекрасна сучасна властивість, яка дозволяє ставити блоки в один ряд, не використовуючи властивості floatі так далі. На мій жаль, на практиці, зіткнувся з тим, що багато хто використовує його в чисту. Тобто так.inline-block( display: inline-block; )
Код у такому виконанні підтримується лише останніми сучасними браузерами. Для повної підтримки, до нього необхідно додати трохи рядків. Повний код такий:
.inline-block( min-height: 250px; display: inline-block; vertical-align: top; zoom: 1; *display: inline; _height: 250px; )
Тут
display: -moz-inline-stack; використовується для розуміння inline-block старої Mozilla.
Властивість vertical-align: top; вирівнює всі блоки вертикалі по верху. Залежно від завдання можна й унизу.
І нарешті властивості
zoom: 1; *display: inline; _height: 250px;
використовуються для IE. Зверніть увагу, що в даному випадку _height: 250 використовується тому, що IE не знає властивості min-height .
Прозорість чи opacity
.opacity( opacity: 0.5; filter: alpha(opacity=50); )Звертаємо увагу на те, що у фільтрах, що використовуються для IE, значення прозорості вказується в діапазоні від 0 до 100, а не від 0 до 1 як завжди.
Анімація або transition
.transition ( -webkit-transition: all 1s ease; transition: all 1s ease; )Трансформація об'єктів або transform
.transform( -webkit-transform: scale(0.3); -ms-transform: scale(0.3); transform: scale(0.3); )Властивості transition і transform не підтримуються браузерам IE нижче 9 версії, а transition і лише з 10 версії. Рішення для старих IE я поки що теж не знайшов.
Розмір заднього фону або background-size
.background-size( background: url("back.jpg") no-repeat top center; -webkit-background-size: cover; background-size: cover; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="back .jpg", sizingMethod="scale");Селектори CSS3
Йдеться про таких селекторів якul li:fist-child() ul li:last-child() ul li:nth-child(3)() input() a:hover()
І інші корисні селектори: які були додані в CSS3. Для того, щоб забезпечити якісну підтримку таких селекторів, ми використовуємо вищезазначену бібліотеку Selectivizr. Щоб вона спрацювала, необхідно просто підключити її перед файлом CSS.
Повний список селекторів з якими працює Selectivizr, можна ознайомитись на офіційній сторінці у розділі «How does it work?».
Насамкінець, хочеться відзначити, що я не розглядав всі властивості на кросбраузерність, а лише ті, що найчастіше використовуються у повсякденній практиці. Сподіваюся цей пост може бути Вам, хоч чимось корисним!
Оновив властивості border-raduius та opacity. Дякую pepelsbey за суворе зауваження!
Оновив більшість властивостей відповідно до рекомендацій. Дякуємо величезному користувачеві Aingis за величезну допомогу!
// echo get_the_post_thumbnail(get_the_ID(), "relatedthumbnail"); // Виводжу свій розмір мініатюри?>Щоб сторінка однаково добре відображалась у різних браузерах, необхідно працювати над її кросбраузерністю. У цьому нам допомагає тестування сторінки та налагодження html/css розмітки. Але є інструменти, які допоможуть скоротити наведення ладу в стилях, і домогтися того, щоб базові стилі були однакові в різних браузерах. Що це за інструменти, навіщо та як їх використовувати – розглянемо далі.
Браузери та базові стилі
Справа в тому, що кожен браузер має за замовчуванням якийсь набір базових стилів, які він застосовує до сторінки за замовчуванням. І якщо ми створимо сторінку на «голому» html без оформлення та стилів, браузер все одно відобразить тег
великим розміром і жирним зображенням, трохи меншим розміром і таке інше. Браузер виділить текст у тезі курсивом, зробить підкресленим, а - Жирним.Відбудеться так тому що в браузері вже є свої стилі для елементів, які за замовчуванням застосовуються до сторінок, що відкриваються в ньому. І справа в тому, що в різних браузерах ці правила трохи відрізняються, від браузера до браузера. Років 10 тому ці відмінності були просто кардинальними, і дуже впадали у вічі. Зараз вони мінімальні, але все ж таки є.
Щоб прибрати ці відмінності, і зробити за промовчанням відображення сторінки у всіх браузерах однаковим - використовують спеціальний файл .css: reset.css або normalize.css
reset.css - що він робить і як його використовувати
Перший з'явився файл reset.css. Цей css файл містить у собі перелік всіх можливих html тегів і скидає їх значення на нуль. Тобто прибирає всі можливі відступи, робить шрифт однаковим у всіх тегах, скидаючи всі стилі тексту. Так що всі заголовки та абзаци відображаються простим текстом, одним розміром та без відступів. В результаті отримуємо скидання стилів за промовчанням у всіх браузерах.
Працює це так, спочатку на сторінці підключаємо файл reset.css і вже після нього свій файл зі стилями. У результаті ми спочатку скидаємо всі стилі, і вже потім у style.css задаємо оформлення html тегам. Таким чином ми досягаємо того, що всі браузери скинуть свої стилі за замовчуванням, і вся розмітка буде базуватися на тих стилях, які ми поставимо в style.css.
Завантажити reset.css
Завантажити reset.css можна на сайті cssreset.com
Або можете завантажити версію Eric Meyer's “Reset CSS” 2.0 за кнопкою нижче, з мого блогу:
normalize.css - як він працює і в чому різниця
Після того як на сторінці підключено reset.css, всі стилі доводиться прописувати заново. І щоразу це заняття втомлює. Тому зміну resetприйшов інший інструмент — normalize. Normailze - як відомо з назви, не скидає всі стилі, а нормалізує, приводить їх до єдиного вигляду у всіх браузерах. Після його застосування базові стилі відображення заголовків, розмір шрифтів, відступи… — уніфікуються та відображаються у всіх браузерах однаково. Використовуючи його - можна заощадити певну кількість часу, яке у випадку з reset було б витрачено на прописування скинутих стилів.
Якщо ви ще не використовували normalize.css, то рекомендую спробувати його в своєму наступному, прокті, і хто знає, можливо ви вже не зможете від нього відмовитися 😉
Завантажити normalize.css
Завантажити normalize.css можна з сайту necolas.github.io/normalize.css
Або завантажити з мого блогу:
Що краще reset чи normalize?
Однозначної відповіді немає.
Перший скидає всі стилі, другий призводить до єдиного знаменника. Досвідчені верстальники, які використовують reset.css, зазвичай мають свої набори стилів, які відразу ж підключають після reset для оформлення контенту. І їм не доводиться щоразу у новій верстці наново визначати стилі для базових елементів. Так роблю і я. Мені зручно і я знаю, які стилі я задаю за замовчуванням, і як вони працюють.
normalize зручний якщо ви вивчите його структуру, можете видозмінити його під себе - налаштувавши базовий зовнішній виглядтегів. І робота з ним також буде зручною на потоці - коли верстати доводиться багато і часто.
Кожен інструмент хороший, головне правильно використовувати 😉
Всі користувачі Інтернету для перегляду сторінок Інтернет сайтів використовують спеціальні програми- Браузери. Браузер це програма, яка здійснює зв'язок користувача із сервером. Браузер посилає запити до сервера і отримує відповіді від нього, і ця відповідь перетворює на той вигляд, який всі звикли називати інтернет сторінкою з усім її вмістом, текстом, зображеннями, відео тощо. Готовий вид сторінки (розташування контенту, розміри, колір, шрифт та ін.) задається за допомогою HTML версткита каскадних таблиць стилів (CSS), які були перетворені із зображення намальованим дизайнером, у вигляд зрозумілий браузеру. Це і називається версткою. Простими словами HTML верстка це розташування елементів інтернет-сторінки, там, де вони повинні розташовуватися за задумом дизайнера, який створював макет майбутньої сторінки.
Але кожен користувач віддає перевагу більш звичному для себе браузеру. У наш час існує 5 найпопулярніших браузерів, про які свідчить статистика. Це Chrome, Safari, Opera, FireFox та Internet Explorer(IE). Ці браузери тієї чи іншої версії найчастіше використовують користувачі Інтернету, для перегляду «світової павутини». Кожен з цих браузерів має свою функціональність і особливості відображення інтернет сторінок.
У великому розмаїтті всіх браузерів та їх версій, та їх особливостях відображення інтернет-сторінок, з'явилося поняття коссбраузерність HTML верстки. Так що ж таке кросбраузерність?!
Кросбраузерність– це властивість інтернет сторінок відображатись у різних версіях браузерів однаково, без спотворень та «розповзання» елементів сторінки, незалежно від особливостей самого браузера.
Самим великою кількістюцих особливостей мають браузери Internet Explorer від Microsoft, за що їх і «не люблять» більшість HTML верстальників, і вигадують для нього різні способиприведення до правильного відображення сторінки (дані способи верстальники називають «милицями»). Особисто наша думка, що згорнути HTML сторінку кросбраузерної можна без застосування цих самих «милиць», які засмічують HTML код сторінки.
Умовні коментарі для Internet Explorer
Условный комментарий для всех версий IE Условный комментарий для IE 7 Условный комментарий для IE 6 Условный комментарий для IE 5 Условный комментарий для IE 5.5 Условный комментарий для IE младше 6 версии Условный комментарий для IE младше 7 версии Условный комментарий для IE младше 8 версии Условный комментарий для IE младше 9 версии Условный комментарий для IE старше 6 версии Условный комментарий для IE старше 7 версии Условный комментарий для IE старше 8 версииОсновні правила кроссбраузерної верстки:
Не секрет, що кожен браузер має свої стилі оформлення тих чи інших елементів HTML коду, розмір шрифту, розмір відступів і т.д. що вже призведе до розповзання елементів сторінки, і вона не буде кросбраузерною.
Звідси можна дійти невтішного висновку, що це власні стилі різних браузерівпотрібно «вимкнути», точніше скинути на однакові. Деякі HTML верстальники роблять це безпосередньо при заданні CSS стилів до окремим елементамми ж використовуємо іншу практику. Ми скидаємо всі CSS стилі браузерів на початку CSS документа. Для цього ми використовуємо допрацьований набір стилів CSS, запропонований meyerweb.com
Скидання CSS стилів (Reset CSS)
html, body, div, span, applet, об'єкт, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, male, strike, strong, sub, sup, tt, var, b, u, i, центр, dl, dt, dd, ol, ul, li, fieldset, форму, мітку, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, фігура, fíгcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video ( margin: 0; padding: 0; border: 0; font-size: 100%; font-weight:100; font: inherit; vertical-align: baseline; ) /* HTML5 display-role reset for older browsers */ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section ( display: block; ) body ( line-height: 1; ) ol, ul ( list-style: none; ) blockquote, q (quotes: none; ) blockquote:before, blockquote:after, q:before, q:after (content: ""; content: none; ) table ( border-collapse: collapse; border-spacing: 0; ) a (text-decoration: none)Цей код, доданий до стилю CSS, скидає всі власні стилі браузерів на однаковий. Це дозволить зробити верстку HTML сторінкиідентичною у всіх браузерах, незалежно від своїх власних стилів.
Валідність HTML документа
Друге правило кросбраузерної HTML верстки це дотримання стандартів HTML та XHTML, затверджених W3C консорціумом. Кожен HTML документ (саме документ) має свій стандарт, і свої особливості написання.
Види стандартів HTML документів та їх відмінності ми розглянемо пізніше, оскільки ця тема потребує окремого розгляду та опису.
Валідність HTML документаце відповідність затвердженим стандартам та нормам W3C консорціуму.
За стандартами W3C, кожен тег HTML документа повинен мати свою пару. Називаються ці пари, що відкриваються та закриваються тегами, але є винятки з цього правила – це теги ,
і т.д., ці теги не мають пари, що закривається.
Чи не закритий парний тег, кожен браузер може зрозуміти по своєму, і відобразить вміст, укладений в ці теги не так як треба верстальнику.
Перевірити валідність HTML документа можна на сайті W3C консорціуму.
Приклад валідного коду:
Валідний код HTML
Цей HTML код відповідає стандартам XHTML 1.0 Strict і є валідним
І містить у собі як парні (закриваються) теги, так і не парний тег
Приклад не валідного коду:
Не валідний код HTML
Цей HTML код не відповідає стандартам W3C і не є валідним