把扩展上传到 Chrome 商店需要在开发者后台填写一系列表单,非常喜欢它对详细介绍的处理,就想着偷师一下。
先上效果,下面是模仿的样子。由于详细介绍一般比设置本身要长,它使用了隐藏、按需显示的方式减少了高度。
看了开发者后台的代码,它是使用 JavaScript 响应鼠标事件并计算高度和显示。作为 CSS 洁癖,我第一反应当然是先考虑用 CSS 实现。
这里主要的问题其实就是如何让鼠标在设置(body)上响应介绍(aside)的显示。
在实现 iPhone 滑块开关的时候,就是通过 <input>
的 :check
来控制 <label>
的变化,方法是利用 +
选择符选择兄弟姐妹元素。
像这种控制其它元素的情况都可以用这个方法。
1 2 3 4 5 6 7 8 9
|
.item-aside { z-index: -1; opacity: 0; }
.item-body:hover + .item-aside { z-index: 1; opacity: 1; }
|
全部的代码,也火速使(tou)用(shi)在了 Saladit 的设置界面:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
<ul class="menu"> <li class="item"> <div class="item-header">Lorem.</div> <div class="item-body">Lorem ipsum dolor sit amet.</div> <div class="item-aside">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugiat, vitae.</div> </li> <li class="item"> <div class="item-header">Nesciunt.</div> <div class="item-body">Sit doloremque repellat natus libero.</div> <div class="item-aside">Pariatur quibusdam voluptas, vero accusamus itaque. Neque magni autem sunt.</div> </li> <li class="item"> <div class="item-header">Animi!</div> <div class="item-body">Similique voluptas, sint quam eligendi.</div> <div class="item-aside">Unde repudiandae, mollitia voluptatum similique repellendus eum. Ut, quae! Deleniti.</div> </li> </ul>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
* { box-sizing: border-box; }
.menu { margin: 15px 10%; }
.item { display: flex; position: relative; margin-bottom: 15px; line-height: 1.6; word-wrap: break-word; }
.item-header { width: 2 / 12 * 100%; padding: 0 10px; text-align: right; font-weight: bold; }
.item-body { flex: 1; width: 10 / 12 * 100%; margin-right: 4 / 12 * 100%; padding: 10px; background-color: #fafafa; &:hover + .item-aside { z-index: 1; opacity: 1; } }
.item-aside { width: 4 / 12 * 100%; position: absolute; z-index: -1; top: 0; right: 0; padding-left: 10px * 2 + 1px; padding-right: 10px; opacity: 0; transition: all 400ms; &::after { content: ''; position: absolute; top: 0; bottom: 0; left: 10px; border-left: 1px #ddd solid; } &:hover { z-index: 1; opacity: 1; } }
|