Як зробити адаптивні таби (вкладки) на css без використання скриптів Робимо адаптивні таби без javascript та брудних хаків Таби на css та html

Головна / Оптимізація роботи

Табина мій погляд є одним з найкращих рішеньдля тематичного структурування інформації, а також компактного надання контенту користувачеві на одній сторінці. Сьогодні ми розберемося як створити таку функціональну штучку без використання Javascript на одних лише HTML та CSS3.

Для створення табів ми будемо використовувати тег inputта CSS селектором :checked. В першу чергу нам доведеться створити розмітку сторінки на HTML

Натискання на радіо-бокси активуватиме відповідні таби. Першому inputвиставляємо атрибут checked=”checked”Це дозволить зробити перший таб за замовчуванням відкритим. Самі радіо-бокси ми сховаємо, а для натискання на них нам послужить тег label. У блоці .tabs_contу нас будуть блоки з табами в яких і розміститься контент (текст, картинки і т.д.) . Поки що все просто.

Переходимо до CSS стилів

Tabs ( position: relative; margin: 0 auto; width: 800px; ) .tabs label ( color: #555; cursor: pointer; display: block; float: left; width: 150px; height: 45px; line-height: 45px position: relative; top: 2px; text-align: center; ) .tabs input ( position: absolute; left: -9999px; ) #tab_1:checked~ ~ #tab_l3 ( background: #fff; border-color: #fff; top: 0; z-index: 3; ) .tabs_cont ( background: #fff; position: relative; z-index: 2; height: 230px; )

Тут ми за допомогою стилів робимо тег labelблоковим елементом і задаємо йому розміри, місце розташування та зовнішній вигляд(ви можете задати свої стилі для фону та кордонів) так як нам потрібно, а так само ховаємо input'и за допомогою абсолютного позиціонування.

Далі піде той самий селектор :checkedпро який ми згадували на початку. Простими словами, якщо радіо-бокс з id #tab_1вибраний/відзначений, то застосовується стилі до блоку з id #tab_l1ну і так далі за аналогією. У нашому випадку ми застосовуємо стилі до вибраної назви таба. Ну і в кінці задаємо стилі до блоку з контентом табів.

Наступне наше завдання це зробити так, щоб наші таби могли перемикатися. Для реалізації цього завдання такі стилі:

Tabs_cont > div (position: absolute; left: -9999px; top: 0; opacity: 0; -moz-transition: opacity : opacity .5s ease-in-out; ) #tab_1:checked ~ .tabs_cont #tab_c1, #tab_2:checked ~ .tabs_cont #tab_c2, #tab_3:checked ~. : 1;

Насамперед сховаємо всі наші таби. Найпростіше рішення це використовувати display: none;, Але оскільки нам потрібна плавність, легкі шляхи не для нас, тому за допомогою position: absolute;пересуваємо наші блоки за межі видимості та ще робимо цей блок повністю прозорим за допомогою властивості opacity: 0;і плавно піднімаємо це значення до одиниці. Домогтися плавності нам допоможе властивість transition, Яке описано після. Потім знову ж таки скористаємося селектором :checkedза допомогою якого робимо видимими блоки, що відповідають обраним радіо-боксам.

На цьому все! Самостійно попрацювавши зі стилями, ви зможете змінити зовнішній вигляд на свій смак.

Нижче ви можете завантажити вихідні записи.

Продовжуючи попередній пост про стилізацію елементів вибору, хотів би розповісти як зробити повністю адаптивні таби без використання javascript, абсолютного позиціонування та хаків з посиланнями.

Для початку хотів би сказати, що я не закликаю відмовитися від JavaScript на користь лише CSS, нижче буде представлений лише один із способів реалізації табів. Існує багато ситуацій, коли такий підхід вам не підійде і де без JS не обійтися, але зараз не про це.

Давайте зрозуміємо, що ми хочемо бачити як результат роботи і які вимоги ми висуваємо до нього:

  1. Робота без JavaScript,
  2. Немає прив'язки до кількості табів (ми можемо використовувати один віджет на різних сторінкахз різним контентом усередині),
  3. Адаптивність,
  4. Максимальна кросбраузерність та кросплатформність,
  5. Максимально зручний та зрозумілий UI,
  6. Немає обмежень до внутрішнього змісту табів, будь то текст, медіа контент або верстка всередині таба.

Візуально має вийти щось подібне:

Перед тим, як показати свій варіант табів без JSя хотів би розповісти про деякі варіанти реалізацій, які я знайшов у процесі вирішення цього завдання.

Варіант перший

Людина придумала цей спосіб або явно хотіла знущатися з користувачів, або він один з відвідувачів реддита, який створював ті самі «зручні» регулятори гучності. У мене подібний підхід викликає нервовий тик.

Суть методу полягає в наступному:

Як заголовки (самих кнопок) табів використовуються посилання, в атрибут href , яких прописується id відповідної вкладки — div'а або будь-якого іншого елемента. Виділення активної вкладки відбувається за допомогою псевдокласу: target.

Працює це так:

Як ви могли помітити, ми маємо деякі проблеми з використанням даного методу:

  1. При натисканні на таб сторінка починає скакати, тому що браузер відправляє нас туди, куди веде це посилання. Уникнути, звичайно ж, цього можна, але без JS вже ні як.
  2. Активний заголовок таба не виділяється, це можна зробити, але дуже проблематично.
  3. Спочатку активних табів немає (оскільки ми ще не натискали на посилання) і нам доводиться вдаватися до хаку і робити активним третій таб, виділити перший таким способом не вийде.
  4. Дуже спірна адаптивність: так, вкладки перебудовуються на новий рядок при звуженні екрану, а контент таба звужується разом з нею, проте це виглядає не дуже красиво. Цю проблему можуть вирішити медіа-запити, проте враховуючи те, що ми ходимо не прив'язуватися до кількості табів, на деяких розмірах дисплеїв проблема залишиться.

Робимо виправданий висновок: цей метод нам не підходить, оскільки не задовольнять більшу частину вимог. Реалізації жахлива, і я не радив би її використовувати.

Варіант другий

Цей метод створення табів без JavaScriptвже практичніший, хоча так само має деякі проблеми у застосуванні. Суть методу в наступному: для заголовків вкладок використовуються елементи checkbox і label, а за допомогою псевдокласу:checked і ще одного div елемента ми можемо показати контент тільки активної вкладки та приховати решту:

Tab-wrapper input:checked + label + .tab-item(display: block;)

Tab - wrapper input : checked + label + . tab - item ( display : block ; )

Ось як це працює:

Як ви могли помітити, у цьому прикладі ми використовуємо position: absolute; щоб розмістити заголовки вкладок зверху, а контент вкладки знизу. Це створює певні проблеми:

  1. Повна не адаптивність. При зміні розмірів екрана вкладки падають вниз і вміст вкладки закриває їх. Це можна виправити: зробити горизонтальний скролл вкладок, таке рішення має бути, але мені не дуже подобається.
  2. Так як для відображення контенту вкладок ми використовуємо абсолютне позиціонування, нам доведеться вказувати фіксовану висоту вкладок, інакше вони будуть перекривати контент, який знаходиться нижче (видимо в прикладі), а це означає, що ми не можемо використовувати даний підхідпри заздалегідь невідомій кількості вкладок.

Звичайно, в деяких випадках цей метод можна застосовувати, наприклад, коли ви знаєте кількість вкладок і обсяг контенту всередині них. Але ми шукаємо універсальне рішення, тому цей підхід не застосовується в нашому випадку.

Рішення

Третій варіант, і він рішення, є модифікацією другого методу. Працює він так само, проте ми не будемо використовувати абсолютне позиціонування та властивість float для заголовків.

У даному методіми використовуємо нині модний flexbox для розміщення вкладок та їхнього контенту. Вся краса flexbox тут полягає в тому, що ми можемо позначити які елементи відображати спочатку, а які наприкінці. Це можна зробити за допомогою якості order: 1; , Яке за умовчанням дорівнює нулю.

Адаптивність вкладок також досягається рахунок flex властивості flex-grow: 1; , що дозволяє вкладкам розтягуватися на всю ширину контенту, за рахунок цього ми можемо не перейматися відображенням різної кількості табів. Також ми можемо розміщувати контент будь-якого та різного об'єму всередині кожної вкладки, це не впливатиме на відображення контенту після них.

Цей підхід працює у всіх сучасних браузерах, включаючи мобільні. З, незвичних для багатьох, властивостей використовується тільки Flexbox, а він уже давно має широку підтримку. У браузерах FireFox, Chrome, Safari та Opera мною не було виявлено будь-яких проблем із роботою вкладок.

Ви можете перевірити цей підхід на jsfiddle або на своїх проектах. Радий побачити й інші пропозиції вирішення цієї проблеми в коментарях.

Нещодавно, ми розглянули реалізації вкладок (табів) зі змістом, без підключення JavaScript, використовуючи в роботі виключно стандарти.
Сьогодні я хочу познайомити вас, з ще одним, не менш цікавим рішенням формування компактного блоку вкладок (табів), побудованих на чистому CSS3 і використанням елементів адаптивної верстки. Як і в першому варіанті, нічого зайвого і громіздкого, щонайменше коду css, і у вашому розпорядженні з'явиться адаптивний блок з вкладками, що перемикаються, який відмінно впишеться в будь-який розділ сторінки, будь то окреме повідомлення, бічна колонка, або модальне вікно.

Які зміни було внесено щодо першого варіанта?
Насамперед, блок вкладок став адаптивним, тобто. при перегляді на мобільних пристроях, розмір вкладок змінюється в залежності від розмірів екранів користувацьких пристроїв, текст заголовків забирається і залишаються тільки шрифт-іконки, що вказують на зміст змісту тієї чи іншої.
Шрифт-іконки прикрутив від колекції, колекція дуже багата і до того ж абсолютно безкоштовна. Ви можете інтегрувати іконки в будь-який проект, використовуючи завантажений набір зі шрифтами, або ж підключити до файлу стилів cssбезпосередньо, з сайту розробника через @import , використовуючи такий рядок:

@ import url( "http://maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css") ;

@import url("http://maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css");

У демонстраційному прикладі саме так я й зробив, тож глянувши на вихідники, легко розберетеся що до чого.
Структура вкладок у Html досить проста. Базовий div-контейнер, зв'язування

, в яких прихований до певного часу певний контент. Всі! Нічого зайвого, ніяких бібліотек js, ні додаткових файлів зображень в оформленні, зовнішній вигляд вкладок, а також їх функціональність формується виключно засобами CSS. Звичайно, використання нових стандартів CSS3 не гарантує стабільної роботи у всіх браузерах без винятку, але в сучасних версіях вкладки працюють відмінно. IE-шка коректно відображає вкладки починаючи з 9-ї версії. Так що якщо вам не байдужа психіка і почуття сприйняття користувачів, які вперто сидять на більш старих версіях цього «брууузера», даний спосібстворення вкладок краще не застосовувати, а із застосуванням jQuery.

HTML

< div class = "tabs" > < input id= "tab1" type= "radio" name= "tabs" checked> < label for = "tab1" title= "Вкладка 1" >Вкладка 1 < input id= "tab2" type= "radio" name= "tabs" > < label for = "tab2" title= "Вкладка 2" >Вкладка 2 < input id= "tab3" type= "radio" name= "tabs" > < label for = "tab3" title= "Вкладка 3" >Вкладка 3 < input id= "tab4" type= "radio" name= "tabs" > < label for = "tab4" title= "Вкладка 4" >Вкладка 4 < section id= "content-tab1" > < p> < section id= "content-tab2" > < p> < section id= "content-tab3" > < p>Тут розміщуєте будь-який зміст. < section id= "content-tab4" > < p>Тут розміщуєте будь-який зміст.

Для організації блоків із вмістом я використав тег

з обойми HTML5, який застосовується, в більшості випадків, для поділу документа на розділи, різні і за змістом і змістом, з можливістю використання власних заголовків першого рівня

.
Перемикання вкладок відбувається за допомогою взаємодії атрибуту checked у тезі і псевдокласу:checked , міцно пов'язаними через ідентифікатори CSS. В обробці такого методу і спотикається стареньке, знамените гальмо прогресу Internet Explorer 8, з 9-ї версії все працює у кращому вигляді.

Плавно ми підійшли до найцікавішого, формування стилів наших вкладок за допомогою магії CSS. Тут справи ще простіше, особливо розписувати кожну властивість і параметри сенсу немає, у вихідниках прописав деякі пояснення, так що думаю розібратися що куди і навіщо, праці не складе, а виникнуть питання, або виявите помилку, пишіть у коментарях, обов'язково відповім, і допоможу.

CSS3

/* Базовий контейнер табів */. tabs ( min- width: 320px; max- width: 800px; padding: 0px; margin: 0 auto; ) /* Стилі секцій зі змістом */. tabs> section ( display: none; padding: 15px; background: #fff; border: 1px solid #ddd; ) . tabs> section> p ( margin: 0 0 5px; line- height: 1.5 ; color: #383838; /* прикрутимо анімацію */- webkit-animation-duration: 1s; animation- duration: 1s; - webkit-animation-fill-mode: both; animation-fill-mode: both; - webkit-animation-name: fadeIn; animation-name: fadeIn; ) /* Описуємо анімацію властивості opacity */@- webkit- keyframes fadeIn ( from ( opacity: 0 ; ) to ( opacity : 1 ; ) ) @ keyframes fadeIn ( from ( opacity : 0 ; ) to ( opacity : 1 ; ) ) /* Ховаємо чекбокси */. tabs> input ( display: none; position: absolute; ) /* Стилі перемикачів вкладок (табів) */. tabs> label ( display: inline- block; margin: 0 0 - 1px; padding: 15px 25px; font- weight: 600 ; text- align: center; color: #aaa; border: 0px solid #ddd; border- width: 1px 1px 1px 1px;background: #f1f1f1; border- radius: 3px 3px 0 0 ; ) /* Шрифт-іконки від Font Awesome у форматі Unicode */. tabs> label: before ( font-family: fontawesome; font-weight: normal; margin-right: 10px; ) . tabs> label[ for *= "1" ] : before ( content: " \f 19a"; ). tabs> label[ for *= "2" ] : before ( content: " \f 17a"; ). tabs> label[ for *= "3" ] : before ( content: " \f 13b"; ). tabs> label[ for *= "4" ] : before ( content: " \f 13c"; } /* Зміна стилю перемикачів вкладок при наведенні */. tabs> label: hover ( color: #888; cursor: pointer; ) /* Стилі для активної вкладки */. tabs> input: checked+ label ( color: #555; border- top: 1px solid #009933; border- bottom: 1px solid #fff; background: #fff; ) /* Активація секцій за допомогою псевдокласу: checked */ #tab1:checked~#content-tab1, #tab2:checked~#content-tab2, #tab3:checked~#content-tab3, #tab4:checked~#content-tab4 ( display: block; ) /* Забираємо текст з перемикачів * та залишаємо іконки на малих екранах */@ media screen and (max- width: 680px) ( . tabs> label ( font- size: 0 ; ) . tabs> label: before ( margin: 0 ; font- size: 18px; ) ) /* Змінюємо внутрішні відступи * перемикачів для малих екранів */@ media screen and (max- width: 400px) ( . tabs> label ( padding: 15px; ) )

/* Базовий контейнер табів */ .tabs ( min-width: 320px; max-width: 800px; padding: 0px; margin: 0 auto; ) /* Стилі секцій зі змістом */ .tabs>section ( display: none; : 15px; background: #fff; border: 1px solid #ddd; ) .tabs>section>p ( margin: 0 0 5px; line-height: 1.5; color: #383838; -duration: 1s; animation-duration: 1s; -webkit-animation-fill-mode: both; animation-fill-mode: both; властивості opacity */ @-webkit-keyframes fadeIn ( from ( opacity: 0; ) to ( opacity: 1; ) ) @keyframes fadeIn ( from ( opacity: 0; ) to ( opacity: 1; ) ) /* Ховаємо чекбокси * / .tabs>input ( display: none; position: absolute; ) /* Стилі перемикачів вкладок (табів) */ .tabs>label ( display: inline-block; margin: 0 0 -1px; padding: 15px 25px; font- weight: 600; text-align: center; color: #aaa; border: 0px solid #ddd; border-width: 1px 1px 1px; background: #f1f1f1; border-radius: 3px 3px 00; ) /* Шрифт-іконки від Font Awesome у форматі Unicode */ .tabs>label:before ( font-family: fontawesome; font-weight: normal; margin-right: 10px; ) .tabs>label:before ( content: " \f19a"; ) .tabs>label:before ( content: "\f17a"; ) .tabs>label:before ( content: "\f13b"; ) .tabs>label:before ( content: "\f13c"; ) /* Зміна стилю перемикачів вкладок при наведенні */ .tabs>label:hover ( color: #888; cursor: pointer; ) /* Стилі для активної вкладки */ .tabs>input:checked+label ( color: #555; border -top: 1px solid #009933; border-bottom: 1px solid #fff; background: #fff; content-tab2, #tab3:checked~#content-tab3, #tab4:checked~#content-tab4 ( display: block; ) /* Забираємо текст з перемикачів * і залишаємо іконки на малих екранах */ @media screen and (max -width: 680px) ( .tabs>label ( font-size: 0; ) .tabs>label:before ( margin: 0; font-size: 18px; ) ) /* Змінюємо всередину енние відступи * перемикачів для малих екранів */ @media screen and (max-width: 400px) (.tabs>label (padding: 15px); )

Оформити вкладки () ви можете як завгодно, все, що в прикладі, це тільки приклад, моє миттєве бачення продукту, нічого більше. Значення Unicode потрібних вам шрифт-іконок зможете дізнатися на сайті розробника, для цього просто натисніть на обрану іконку і скопіюйте виданий цифровий код, приблизно такого виду: \f13b .
Зверніть увагу, коли ви зменшуєте розмір вікна браузера, вкладки автоматично підлаштовуються під поточний розмір до певного значення (у прикладі 680px), після цього значення текстові заголовки вкладок зникають, залишаються іконки. Тим самим досягається максимальна компактність всього блоку вкладок, залишається лише правильно підібрати ці іконки, що підходять за змістом представленому контенту всередині вкладок.

Дивіться живий приклад роботи вкладок (табів), завантажуйте вихідні джерела, експериментуйте з параметрами, і творіть, творіть, творіть...

Якщо ви втомилися працювати з англомовними шаблонами і мрієте про шанс користуватися русифікованими шаблонами, то ви безперечно зрадієте одній чудовій новині. На маркетплейсі TemplateMonster з'явилися ті готові рішення, які вам потрібні. Так-так, на сайті тепер можна ознайомитися з найкращими. Локалізовані шаблони — саме те, що потрібно, якщо ви хочете побудувати свій онлайн-проект за мінімальну кількість часу. Крім того, що тексти для шаблонів писалися вручну, вони мають усі необхідними інструментамидля створення професійного сайту

З повагою Андрій


About a code

Nav Tab

Navigation tabs для двох форм.

Responsive: no

Dependencies: bootstrap.css

About a code

CSS Tab

Compatible browsers: Chrome, Firefox, Opera, Safari

Responsive: yes

Dependencies: -

About a code

Tabs

The + selector selects the next adjacent element. Historically this haen been cool for styling labels. З CSS grid, елемент може бути next до іншого в markup, але деякідешево повністю різняться в дисплеї. Цей щит використовує простий вхід:використаний selector з'єднується з безліччю + "с стилем різних сторінок з imaginary microsite.

Compatible browsers: Chrome, Edge, Firefox, Opera, Safari

Responsive: yes

Dependencies: -

About a code

Pure CSS Tabs

Radio version of tabs. Requirements: немає конкретних ідентифікаційних ідентифікаторів для CSS (CSS повинні бути потрібні для конкретних ID), flexible for any number of unkown tabs, accessible. .

Compatible browsers: Chrome, Edge, Firefox, Opera, Safari

Responsive: yes

Dependencies: -

About a code

CSS Tabs

Pure CSS vertical tabs.

Compatible browsers: Chrome, Edge, Firefox, Opera, Safari

Responsive: no

Dependencies: -

About a code

Pure CSS Tabs With Indicator

Compatible browsers: Chrome, Edge, Firefox, Opera, Safari

Responsive: yes

Dependencies: -

About a code

Animated Transition Tabs

Animated transition tabs with checkboxes.

Compatible browsers: Chrome, Edge, Firefox, Opera, Safari

Responsive: yes

Dependencies: -

About a code

Pure CSS Color Tabs

No label pure CSS color tabs.

Compatible browsers: Chrome, Edge, Firefox, Opera, Safari

Responsive: yes

Dependencies: -

About a code

CSS Only Tabs

Material Design CSS only tabs.

Compatible browsers: Chrome, Edge, Firefox, Opera, Safari

Responsive: yes

Dependencies: -

About a code

CSS3 Tabs

Responsive pure CSS3 tabs by Sorax.

Compatible browsers: Chrome, Edge, Firefox, Opera, Safari

Responsive: yes

Dependencies: -

About a code

Tab Controls Using HTML And CSS

Clicking on labels effectively the same as clicking on input boxes. The radio inputs є hidden with CSS. Якщо радіо є вибраним, їх суворо tab вміст небагатьох show up. Що це тільки! Зображення тільки для вас може бути виконаний у стилі вибраного tab без відкриття до деякого JS, але це повинно бути дуже великим ділом.

Compatible browsers: Chrome, Edge, Firefox, Opera, Safari

Responsive: yes

Dependencies: -

About a code

Pure CSS Tabs

Just HTML та CSS.

Compatible browsers: Chrome, Edge, Firefox, Opera, Safari

Привіт, шановні читачі. У цей такий морозний день ми будемо робити з Вами красиві таби з допомогою CSSта JQuery. Виявляється, що ці, так звані, таби дуже корисні для сайту в цілому, вони дозволяють суттєво заощадити місце на сторінці. Їх можна розмістити скрізь, у сайдбарі, чи не посередньо, у самому контенті, статті.

Так само, таби, які ми робитимемо, гарного дезайну, вони суттєво прикрасять Ваш сайт. Ось як:-) красиво і корисно, мені здається рідкісний збіг. Тим паче робляться вони лише за допомогою , відповідно: швидко завантажуються, і не несуть ніякого навантаження на сервер.

JQuery

$(document).ready(function() ( $("#content div").hide(); // Прихований вміст $("#tabs li:first").attr("id","current"); // Який таб показати першим $("#content div:first").fadeIn(); // Показ першого контенту таба $("#tabs a").click(function(e) ( e.preventDefault(); $ ("#content div").hide(); //Приховати весь вміст $("#tabs li").attr("id",""); //Скидання ідентифікаторів $(this).parent().attr ("id","current"); // Активація ідентифікаторів $("#" + $(this).attr("title")).fadeIn(); // Показати вміст поточної вкладки )); ))() ;

Ось у принципі і все, Ви головне експериментуйте, У ці вкладки можна додати фонові зображення, які суттєво нададуть їм виду, тільки ось завантажуватись вони будуть довше.

Сумісність із браузерами

Ці таби підтримують практично всі браузери, тільки в деяких вони будуть виглядати трохи інакше, тому що багато, ще поки що, не підтримують CSS3.

Ось і все, сподіваюся Вам сподобалося:-) Якщо щось Вам буде не зрозуміло обов'язково запитуйте в коментарях. До зустрічі.

© 2022 androidas.ru - Все про Android