下图是一个Accordion组件,请用HTML+CSS实现其UI,并用面向对象的思路把折叠效果的JS实现。如果能用纯css的方式实现其折叠效果更佳。
HTML:
CSS:
JS:
* { margin: 0; padding: 0; } li { background: #eee; line-height: 24px; display: block; position: relative; } li a { background: #ddd; line-height: 24px; display: block; } ul li input[type="checkbox"] { position: absolute; top: 0; width: 100%; height: 24px; opacity: 0; } ul li input[type="checkbox"]:not(:checked) + ul { display: none; }
<ul> <li> <a>列表</a> <input type="checkbox" name="list" /> <ul> <li>子列表</li> <li>子列表</li> <li>子列表</li> </ul> </li> <li> <a>列表</a> <input type="checkbox" name="list" /> <ul> <li>子列表</li> <li>子列表</li> <li>子列表</li> </ul> </li> </ul>
* { margin: 0; padding: 0; list-style: none; } dt a { background: #eee; line-height: 30px; display: block; text-decoration: none; padding-left: 30px; text-shadow: 0 0 2px #000; color: #eee; border-bottom: 1px solid #f9f9f9; } dt a:after { content: ""; display: inline-block; border: 8px solid #444; border-color: transparent transparent transparent #444; position: absolute; left: 10px; margin-top: 7px; } dt:target a:after { border-color: #444 transparent transparent transparent; margin-top: 10px; left: 6px } li { padding-left: 30px; font-size: 12px; line-height: 24px; border-bottom: 1px dashed #ddd } dd {display: none} dt:target + dd {display: block}html:
<dl> <dt id="a1"><a href="#a1">列表</a></dt> <dd> <ul> <li>子列表</li> <li>子列表</li> <li>子列表</li> </ul> </dd> <dt id="a2"><a href="#a2">列表</a></dt> <dd> <ul> <li>子列表</li> <li>子列表</li> <li>子列表</li> </ul> </dd> <dt id="a3"><a href="#a3">列表</a></dt> <dd> <ul> <li>子列表</li> <li>子列表</li> <li>子列表</li> </ul> </dd> </dl>