Как сделать так, чтобы конечный контент не перекрывал содержимое моей вкладки?

Я разработал веб-страницу, которая использует только CSS для разрешения шаблона дизайна вкладок. К его объективной проблеме нет, и работает; но в нем есть пара ошибок, которые я хотел бы исправить, и, похоже, не могу найти способ сделать это.

Было бы хорошо, если бы решение было совместимо с IE 7, 8 или 9 (поскольку мой текущий шаблон работает только в Edge, Chrome и Firefox).

Проблема возникает, когда у меня есть элементы ниже содержащего DIV, и содержимое внутри перекрывает его. Кажется, что контейнер DIV не «меняет размер» при изменении вкладок.

Вот пример того, как выглядит страница:

<html>
    <head>
    	<style>
    		.tabs{display:block;list-style:none;position:relative;padding:0;border-bottom:4px solid #475b7e;}
    		.tabs li{margin:0;display:inline-block;font-weight:bold;cursor:auto;border:none;max-width:100px;vertical-align:top;}
    		.tabs li .tab{display:none;}
    		.tabs li i{font-weight:normal;}
    		.tabs li [for^=tab]{background-color:#bcc7d8;color:#314362;display:block;position:relative;padding:0 4px 0 4px;margin:0;line-height:18px;}
    		.tabs li [for^=tab]:hover{background-color:#ffffff;color:#475b7e;}
    		.tabs li .tab:checked + [for^=tab]{background-color:#314362;color:#ffffff;}
    		.tabs li .tab:checked + [for^=tab]:hover{background-color:#475b7e;color:#ffffff;}
    		.tabs li .tab:checked ~ [class=tabcontainer]{display:block;position:absolute;left:0;width:100%;}
    		.tabs li .tabcontainer{display:none;padding:6px 4px 20px 4px;font-weight:normal;}
    	</style>
    </head>
    <body>
    	<p>Below is a DIV that i would like to grow with the UL list; and also be able to see the text on the next P mark (below the DIV); and more, i would like to be able to use this on IE 7 as well, at least IE 9.</p>
    	<div class = "container">
    		<ul class = "tabs">
    			<li>
    				<input type = "radio" class = "tab" name = "tab" id = "tab_first" checked = "checked" /><label for = "tab_first">First</label>
    				<div class = "tabcontainer">Content of First, single line</div>
    			</li>
    			<li>
    				<input type = "radio" class = "tab" name = "tab" id = "tab_second" /><label for = "tab_second">Second</label>
    				<div class = "tabcontainer">Content of Second<br />2 Lines now</div>
    			</li>
    			<li>
    				<input type = "radio" class = "tab" name = "tab" id = "tab_third" /><label for = "tab_third">Third</label>
    				<div class = "tabcontainer">Content of Third<br /><br />3 lines, second is empty</div>
    			</li>
    			<li>
    				<input type = "radio" class = "tab" name = "tab" id = "tab_forth" /><label for = "tab_forth">Forth</label>
    				<div class = "tabcontainer">Content of Forth, (just because) 1 line again</div>
    			</li>
    			<li>
    				<input type = "radio" class = "tab" name = "tab" id = "tab_fifth" /><label for = "tab_fifth">Fifth</label>
    				<div class = "tabcontainer">Content of Fifth<br />Another line, but even more<br /></br /><br />Now done</div>
    			</li>
    		</ul>
    	</div>
    	<p>Text i would like to see</p>
    </body>
    </html>

Еще одна вещь: можно было бы использовать на нем javascript (поскольку я уже использую jQuery-UI на сайте), но я не могу изменить структуру «UL» для использования модели вкладок jQuery-UI.

Пожалуйста помоги!

Это может вам помочь onextrapixel.com/creating-content-tabs-with-pure-css

Vignesh Raja 25.07.2018 21:24

Это почти та же самая структура, которую я использовал; даже CSS почти такой же - хорошо - я все же протестирую его, потому что я не делал там, где он не перекрывал бы следующие элементы.

SammuelMiranda 25.07.2018 22:02
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
359
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Абсолютное позиционирование представляет собой проблему, поэтому вкладки только для CSS и вкладки jQuery имеют разную структуру разметки. Вы можете написать jQuery для изменения разметки перед применением компонента вкладок jQuery:

// create a contents element below the list
$('.container').append('<div class = "tabs-content"></div>');

// loop through each list item
$('ul.tabs li').each(function() {

    // move contents to div below list and give each an index-based ID
    $(this).find('.tabcontainer')
           .appendTo('.tabs-content')
           .attr('id', 'tab' + $(this).index());

    // strip markup from list items and build anchors targeting the appropriate ID
    $(this).html('<a href = "#tab' + $(this).index() + '">' + $(this).text() + '</a>' );

});

// initialize jQuery-UI tabs
$('.container').tabs();

Демо скрипки

кажется, дает результат ... повлияет ли это на что-то еще? сначала попробую, но очень понравилось

SammuelMiranda 25.07.2018 22:03

Только если на вашей странице есть другие элементы с такими же классами. Если это так, вам следует быть более конкретным с селекторами.

isherwood 25.07.2018 22:52

не то, что я имел в виду, извините; я имею в виду обратную передачу, распознавание элементов сервером при обратном вызове страницы и тому подобное; Кроме того, элементы «до» и «после» работают в IE 7 или 9? Сначала проверяю и тестирую - потом отмечу ваш ответ и воспользуюсь им

SammuelMiranda 26.07.2018 12:06

ну ... это "сработало", я оставлю это как решение, но мне пришлось внести несколько изменений, например, ".container" не всегда существует (на каждой странице), и результат немного "неформатирован" "- заголовок вкладки очень большой по высоте - все корректировки, которые я делаю, основаны на этом, поэтому спасибо @isherwood

SammuelMiranda 26.07.2018 16:38

Другие вопросы по теме