如何使用HTML/CSS/JavaScript垂直对齐一个项目上的列表?
我有一个包含很长列表的HTML文档,如下所示:如何使用HTML/CSS/JavaScript垂直对齐一个项目上的列表?,javascript,html,css,Javascript,Html,Css,我有一个包含很长列表的HTML文档,如下所示: <ol> <li>frog</li> <li>fish</li> <li>flamingo</li> <li>ferret</li> <li><div class="marked">fox</div></li> ... </ol> 如
<ol>
<li>frog</li>
<li>fish</li>
<li>flamingo</li>
<li>ferret</li>
<li><div class="marked">fox</div></li>
...
</ol>
如何垂直对齐已上市商品的列表?使用“显示”选项垂直显示列表
display: inline;
我通常使用内联块参数,这是
display: inline-block;
然后,您必须在css上执行此操作
.marked: { display: inline-block; }
我希望这对你有用。好的,我真的希望我正确地理解了你,因为这比我预期的时间要长 首先,您必须找到要居中的元素、列表、列表中项目的高度以及要居中的元素的索引。(我从中偷了一个函数来完成最后一点,并将您的类更改为id。您可以确定它是否需要是类)
下面是一个基于James G.代码的解决方案,它通过使用
getBoundingClientRect()
避免了循环:
这个问题涉及很多数学问题。我正在努力寻找答案,但时间比我想象的要长。你能再解释一下你的问题吗?干得好。您可以使用
getBoundingClientRect
避免循环。看我的帖子。酷。多有用的功能啊,蒂尔。
.marked: { display: inline-block; }
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);
list.scrollTop = (index * listItemHeight) - ((list.clientHeight - listItemHeight) / 2);
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;