如何使用HTML/CSS/JavaScript在一个项目上垂直对齐列表
How to vertically align a list on one item, with HTML/CSS/JavaScript?
我有一个HTML文档,它有一个很长的列表,如下所示:
<ol>
<li>frog</li>
<li>fish</li>
<li>flamingo</li>
<li>ferret</li>
<li><div class="marked">fox</div></li>
...
</ol>
列表太长,所有项目都无法在屏幕上显示。我用div class="marked">
和</div>
标记了一个项目。有没有办法将列表垂直居中放在标记的项目上。
- 如果列表太长,它应该在可见屏幕的边缘运行,不创建滚动条
以下是它在浏览器窗口中显示的示例:
__________________
| 2.fish |
| 3.flamingo |
| 4.ferret | <-- This marked item is centered.
| 5.elephant |
|___6.mouse________| <-- No scrollbars.
如何垂直排列已上市商品的列表?
这里有一个基于James G.代码的解决方案,它通过使用getBoundingClientRect()
:来避免循环
http://jsfiddle.net/d8d5jjvc/4/
var list = document.getElementById('list'),
marked= document.getElementById('marked'),
crm= marked.getBoundingClientRect(),
height= crm.bottom-crm.top;
list.scrollTop= (crm.top-height)-(list.clientHeight-height)/2;
好的,我真的希望我能正确理解你,因为这比我预期的要长得多。
工作JSfiddle
首先,你必须找到你所关注的元素,列表,列表中项目的高度,以及你所关注元素的索引
function arrayObjectIndexOf(myArray, searchTerm) {
for(var i = 0, len = myArray.length; i < len; i++) {
if (myArray[i].firstChild === searchTerm) return i;
}
return -1;
}
var list = document.getElementById('list'),
listItems = list.children,
listItemHeight = list.scrollHeight / listItems.length,
target = elem,
index = arrayObjectIndexOf(listItems, target);
然后棘手的部分是数学。首先,我们得到元素在我们居中的元素上方的高度,然后减去容器的高度,减去我们居中的项目,超过2。如果这有意义的话。如果你不懂数学,你可能想画它,它在纸上会更有意义。
list.scrollTop = (index * listItemHeight) - ((list.clientHeight - listItemHeight) / 2);
使用display选项垂直显示列表。
display: inline;
我通常使用内联块参数,这是
display: inline-block;
然后,你必须在你的css上这样做。
.marked: { display: inline-block; }
我希望这对你有用。
相关文章:
- 当在Ember中点击一个项目时,我如何将一个活动类添加到项目列表中
- 通过另一个php应用程序将我的项目推送到Github存储库中
- angularjs移除焦点上的活动类并添加到下一个项目
- 相对于角度控制器中的另一个阵列过滤阵列项目
- 如何通过AngularJS删除一个项目
- 如何使用jquery将所选项目从一个下拉组列表(optgroup)移动到另一个下拉列表(optgroup)
- 获取每个项目中不为 null 的最后一个项目
- 在另一个项目中使用大理石测试rxjs5方法
- 使用javascript/jquery从现有数组中创建一个新数组,该数组保存项目存在的次数
- 如何在猫头鹰旋转木马中滑动所有可见项目,而不是使用上一个/下一个按钮
- Git为整个项目提供一个repo(frontend+node.js)
- 与杜兰达尔合作的第一个JavaScript项目.尝试从第三方 API 获取数据
- Asp.net 引导下拉菜单 - 选择一个项目
- 处理一个项目,想要添加以下菜单栏,并尽量减少向下滑动
- 如何将从GWT编译的JS添加/访问到另一个外部HTML / JS项目中
- 在angularJs的选择框中预先选择一个项目
- 我想在混合移动应用程序中使用Sqlite插件(Cordova)创建一个示例项目
- 如何将一个表单中的项目添加到 Rails 中另一个表单的下拉选项
- jQuery 使用 ID 作为 URL 选择一个项目
- 淡入<灯光>一个项目一个项目