我尝试设计某种 html,但我想使用图像而不是文本。所以我构建了一些非常基本的 html 大纲,每个选项有两个 div,周围有两个 div:
<div class="dungeon-action-select-container">
<div class="dungeon-action-select">
<div class="border"><div></div></div>
<div class="border"><div></div></div>
<div class="border selected"><div></div></div>
<div class="border"><div></div></div>
<div class="border"><div></div></div>
</div>
</div>
最内部的 div 的要点是稍后包含图像。.border div 用于为所选选项提供不同的视觉效果。当有更多选项可供选择时,.dungeon-action-select 应该包含一个垂直滚动条。
容器 div 在那里,允许将整个“东西”固定在屏幕的左上角。
我的问题:当 .dungeon-action-select div 太小时,显示所有选项时,会有一个垂直滚动条。但垂直滚动条显示在 div 内,而不是附加在右侧。我想出的一种解决方案是使 .dungeon-action-select 比内部 div 大 15px。但这只是一个技巧,因为滚动条可能(当然)大于 15px。
到目前为止,这是我的“解决方案”:
.dungeon-action-select-container {
position: fixed;
width: 125px; /* 80px + 2 * 15px + width of scrollbar */
top: 60px;
left: 25px;
}
.dungeon-action-select-container .dungeon-action-select {
height: 320px;
overflow: auto;
position: relative;
}
.dungeon-action-select-container .dungeon-action-select .border {
background-color: #333;
padding: 7px 15px;
}
.dungeon-action-select-container .dungeon-action-select .border div {
width: 80px;
height: 80px;
background-color: black;
}
所以我正在寻找一种方法来自动使包含 div 的滚动条足够大,以便为选项 div 和滚动条(在需要时)放置位置。或者一种从 .dungeon-action-select div 外部附加滚动条的方法。或者作为最后的手段,一些技巧来确定,可移植滚动条的大小。
欢迎任何指点;这是一个可以摆弄的小提琴:http: //jsfiddle.net/b8kUr/2/
解决方案:我希望 Sharkys 的想法能够奏效,但我发现唯一可行的解决方案是使用 JavaScript(如 Marcelo 建议的那样)来计算滚动条的宽度并相应地调整包含 div 的大小(解决方案基于另一个问题,我在这里找到了 SO):
scrollBarHeightAndWidth = null
calcScrollBarHeightAndWidth = ->
scrollDiv = document.createElement("div")
scrollDiv.className = 'tools-scrollbar-measure'
document.body.appendChild(scrollDiv)
# Get the scrollbar width
result = {
width: scrollDiv.offsetWidth - scrollDiv.clientWidth,
height: scrollDiv.offsetHeight - scrollDiv.clientHeight
}
# Delete the DIV
document.body.removeChild(scrollDiv)
result
Tools.scrollBarWidth = ->
scrollBarHeightAndWidth = scrollBarHeightAndWidth || calcScrollBarHeightAndWidth()
scrollBarHeightAndWidth.width
和一些小 css 来隐藏测试 div 并将其配置为具有滚动条:
.tools-scrollbar-measure {
width: 100px;
height: 100px;
overflow: scroll;
position: absolute;
top: -9999px;
}