html - 带边框的 HTML 元素的偏移 anchor 以针对固定标题进行调整

标签 html css twitter-bootstrap anchor offset

我的问题与 this 高度相关之前回答的问题。事实上,@harpo 在最高投票答案的评论中提供的解决方案对我来说是部分解决方案。但是,我发现它实际上不适用于我的某些元素,特别是具有 border 的元素。

一些上下文:我在我的页面上使用 Bootstrap,我在顶部有一个固定的导航栏,然后是一个包含大量未设置样式的 divs.panel 的页面这些div里面的div。我的 body 上有一个 60px 的顶部填充,它将所有内容向下推以解释导航栏。但是,当我单击带有偏移量的链接时(例如 example.com#div2-1),div 的顶部仍被导航栏覆盖。

使用上面链接答案中提供的解决方案,我在 :before 元素上放置了 60px 的负填充(将元素向上拉 60px),然后通过设置高度为 60px。这不会产生视觉差异(有意),但我的 div 的计算高度现在高了 60px,div 比它应该的早 60px 开始,而真正的内容晚 60px 开始。这实质上再次抵消了导航栏的内容。

但是,我发现在有边框的元素上,例如我的 .panel 元素,边框似乎包含所有内容,而 :before 伪-元素我不再对我的 div 的计算高度产生影响,这意味着它再次被导航栏覆盖。

这是我在 JSFiddle 上的代码:http://jsfiddle.net/rszqtw80/3/

如果您查看任何开发工具中的渲染结果,您可以清楚地看到 :before 元素已正确创建并且外部和内部的高度都正确 (60px) div。但是对于内部 div,元素的整体计算高度最终不包括 :before 元素。使用 Chrome Dev Tools 禁用 border 使它对我有用,所以我推断出问题是边框。

所以我的问题是:是否有可能让这个基于 CSS 的偏移量与我的 .panel 元素一起工作,而不会丢失 border 或不得不返回插入 a 标签无处不在?因为老实说,如果没有 border.panel 看起来很难看,并且将每个 div 嵌套在 a 中> 标签也很丑。

提前致谢!

编辑: 稍微重写了我的问题,希望能消除对我意图的任何误解。抱歉我的困惑解释:(

进一步编辑:我已经添加了 3 个屏幕截图,希望能够比任何文字都能更好地展示这一点。我会在这里添加它,但由于缺乏“声誉”,我不能添加两个以上的链接。

最佳答案

你真的不需要 :before 标签。

jsfiddle.net/rszqtw80/8/

为了您的解释:> 选择器选择您元素的所有直接子元素。

.first-element > .all-direct-children

<a class="first-element">
    <div class="all-direct-children">
        <div id="notthisone" class="all-direct-children">
        </div>
    </div>
</a>

#notthisone 元素不会受到您的更改的影响。 使用 nth-child,您可以选择任何您想要的 child 。在你的情况下,我用它来给 Div 1、Div 2 等之后的第一个 anchor 。 margin-top 为 0,这样它就不会与你的标题(Div 1、Div 2)等分开。

关于html - 带边框的 HTML 元素的偏移 anchor 以针对固定标题进行调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26458187/

相关文章:

javascript - 将图像加载到滚动的 DIV 中

javascript - 如何使用jquery在输入文本中添加选中的输入框,无论是onload还是onclick

Android WebView 字体最初未呈现

css - 水平居中 2 个 div,没有包装

html - 尽管在样式表中被设置为 0,但边距仍然存在 - CSS

python - 关于使用 Bootstrap

javascript - bootstrap aside 在小型设备上隐藏分页元素

html - 从 html 表格中的文本开始边框

css - 使用边框半径时,在 Safari 中首次加载时,两侧不会显示阴影

javascript - 在导航栏中放置下拉面板 Bootstrap 3.0.3