如果设计得当,选项卡可以是一个非常方便和有用的界面元素。然而,当构建在移动设备等小屏幕上工作的响应式网站时,基于选项卡的界面可能会成为一个主要问题,尤其是当很难通过CSS修改其外观时。
您可以尝试通过插入媒体查询来修改选项卡的HTML代码。然而,这是一项非常困难的任务,因为您需要手动更改HTML,这在您考虑时有点疯狂。
或者,您可以使用jQuery响应式选项卡我将在本教程中介绍的脚本,将选项卡变成移动设备等小屏幕上的手风琴式界面,这样您就可以使用所有空间来获取更重要的信息。
1.按照如下所示的HTML结构,将基于按钮的选项卡导航和选项卡式内容添加到选项卡UI中。
<section class="accordion">
<!-- Tabs -->
<section class="accordion-tabs">
<button class="accordion-tab accordion-active" data-actab-group="0" data-actab-id="0">Tab 1</button>
<button class="accordion-tab" data-actab-group="0" data-actab-id="1">Tab 2</button>
<button class="accordion-tab" data-actab-group="0" data-actab-id="2">Tab 3</button>
... more tabs here ...
</section>
<!-- Tabbed Content -->
<section class="accordion-content">
<article class="accordion-item accordion-active" data-actab-group="0" data-actab-id="0">
<h4 class="accordion-item__label">Title 1</h4>
<div class="accordion-item__container">
<p>Content 1</p>
</div>
</article>
<article class="accordion-item" data-actab-group="0" data-actab-id="1">
<h4 class="accordion-item__label">Title 2</h4>
<div class="accordion-item__container">
<p>Content 2</p>
</div>
</article>
<article class="accordion-item" data-actab-group="0" data-actab-id="2">
<h4 class="accordion-item__label">Title 3</h4>
<div class="accordion-item__container">
<p>Content 3</p>
</div>
</article>
... more tabbed content here ...
</section>
</section>
2.选项卡UI的主要CSS样式。
.accordion {
width: 96%;
overflow: hidden;
background: white;
border-radius: 10px;
box-shadow: 0 10px 20px -10px rgba(0, 0, 0, 0.3);
}
.accordion-tabs {
display: none;
}
.accordion-tabs :focus {
outline: none;
}
.accordion-item {
border-bottom: 1px solid #c1d7e2;
}
.accordion-item:last-child {
border: none;
}
.accordion-item__label {
position: relative;
margin: 0;
padding: 20px;
cursor: pointer;
transition: padding 0.2s ease;
}
.accordion-item__label::after {
content: "";
position: absolute;
top: -4px;
right: 20px;
bottom: 0;
width: 6px;
height: 6px;
margin: auto;
transform: rotate(45deg);
opacity: 1;
transition: opacity 0.1s ease;
border-radius: 2px;
border: 5px solid transparent;
border-color: transparent #003852 #003852 transparent;
}
.accordion-item__label:hover {
background: #c1d7e2;
}
.accordion-item__container {
height: 0;
padding: 0 20px;
overflow: hidden;
opacity: 0;
transition: padding 0.2s ease, opacity 0.5s 0.15s ease;
}
.accordion-active {
background: #d2e2ea;
}
.accordion-active .accordion-item__label {
padding-bottom: 0;
color: #003852;
cursor: inherit;
}
.accordion-active .accordion-item__label:hover {
background: none;
}
.accordion-active .accordion-item__label::after {
opacity: 0;
}
.accordion-active .accordion-item__container {
height: auto;
padding: 20px;
opacity: 1;
}
.accordion-active .accordion-item__container p,
.accordion-active .accordion-item__container h4 {
color: #7baac1;
}
.accordion-active .accordion-item__container p:first-child,
.accordion-active .accordion-item__container h4:first-child, {
margin-top: 0;
}
.accordion-active .accordion-item__container p:last-child,
.accordion-active .accordion-item__container h4:last-child, {
margin-bottom: 0;
}
3.使用CSS媒体查询,当屏幕大小小于600px时,将选项卡UI变成手风琴。
@media (min-width: 600px) {
.accordion {
width: 100%;
max-width: 600px;
}
}
@media (min-width: 600px) {
.accordion-tabs {
display: flex;
background: #d2e2ea;
}
.accordion-tabs .accordion-tab {
flex: 1;
padding: 20px;
font: inherit;
border: none;
cursor: pointer;
color: #003852;
background: #d2e2ea;
transition: background 0.1s ease;
}
.accordion-tabs .accordion-tab:hover {
background: #c1d7e2;
}
.accordion-tabs .accordion-tab:last-child {
border-right: 0;
}
.accordion-tabs .accordion-tab.accordion-active {
color: #006b99;
background: white;
}
.accordion-item {
display: none;
min-height: 260px;
padding: 30px;
border: none;
background: white;
}
.accordion-item__label,
.accordion-item__container {
padding: 0;
transition: inherit;
}
.accordion-item__label {
margin-bottom: 20px;
}
.accordion-item.accordion-active {
display: block;
}
.accordion-item.accordion-active .accordion-item__container {
padding: 0;
}
}
4.在文档末尾加载必要的jQuery库(slim构建)。
<script src="/path/to/cdn/jquery.slim.min.js"></script>
5.启用选项卡(可折叠标题)以在选项卡式内容(可折叠面板)之间切换。
$(document).ready(function () {
console.log("document ready");
const labels = document.querySelectorAll(".accordion-item__label");
const tabs = document.querySelectorAll(".accordion-tab");
function toggleShow() {
const target = this;
const item = target.classList.contains("accordion-tab") ?
target :
target.parentElement;
const group = item.dataset.actabGroup;
const id = item.dataset.actabId;
tabs.forEach(function (tab) {
if (tab.dataset.actabGroup === group) {
if (tab.dataset.actabId === id) {
tab.classList.add("accordion-active");
} else {
tab.classList.remove("accordion-active");
}
}
});
labels.forEach(function (label) {
const tabItem = label.parentElement;
if (tabItem.dataset.actabGroup === group) {
if (tabItem.dataset.actabId === id) {
tabItem.classList.add("accordion-active");
} else {
tabItem.classList.remove("accordion-active");
}
}
});
}
labels.forEach(function (label) {
label.addEventListener("click", toggleShow);
});
tabs.forEach(function (tab) {
tab.addEventListener("click", toggleShow);
});
});