如果设计得当,选项卡可以是一个非常方便和有用的界面元素。然而,当构建在移动设备等小屏幕上工作的响应式网站时,基于选项卡的界面可能会成为一个主要问题,尤其是当很难通过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); }); });