如何在视口中的HTML表中定位锚点

时间:2017-12-08 08:49:46

标签: css html-table position anchor padding

我在html表中使用anchor elemnts,并希望在视口顶部添加一些填充。我想通了,我可以将锚放在TD元素内部的虚拟DIV元素中来实现这一点。但是我也想突出显示目标表行。

如何在没有javascript的情况下实现此目的?

我尝试了几种解决方案 HTML position:fixed page header and in-page anchors, 但它们在html表中都不能很好地工作。

这是一些最小的工作示例。

  • " D"锚具有正确的突出显示,但定位没有 工作
  • " E"锚具有正确的定位,但没有突出显示。



tr:target {
  color: #ee4444;
  position: relative;
  top: -40px;
}

div:target {
  color: #ee4444;
  position: relative;
  top: -40px;
}

<a href="#D">go to D</a> <a href="#E">go to E</a>
<table>
  <tr>
    <th>Symbol</th>
    <th>1932 ITU/ICAN Phonetic</th>
  </tr>
  <tr>
    <td>A</td>
    <td>Amsterdam</td>
  </tr>
  <tr>
    <td>B</td>
    <td>Baltimore</td>
  </tr>
  <tr>
    <td>C</td>
    <td>Casablanca</td>
  </tr>
  <tr id="D">
    <td>D</td>
    <td>Denmark</td>
  </tr>
  <tr>
    <td>
      <div id="E"></div>E</td>
    <td>Edison</td>
  </tr>
  <tr>
    <td>F</td>
    <td>Florida</td>
  </tr>
  <tr>
    <td>G</td>
    <td>Gallipoli</td>
  </tr>
  <tr>
    <td>H</td>
    <td>Havana</td>
  </tr>
  <tr>
    <td>I</td>
    <td>Italia</td>
  </tr>
  <tr>
    <td>J</td>
    <td>Jerusalem</td>
  </tr>
  <tr>
    <td>K</td>
    <td>Kilogramme</td>
  </tr>
  <tr>
    <td>L</td>
    <td>Liverpool</td>
  </tr>
  <tr>
    <td>M</td>
    <td>Madagascar</td>
  </tr>
  <tr>
    <td>N</td>
    <td>New York</td>
  </tr>
  <tr>
    <td>O</td>
    <td>Oslo</td>
  </tr>
  <tr>
    <td>P</td>
    <td>Paris</td>
  </tr>
  <tr>
    <td>Q</td>
    <td>Quebec</td>
  </tr>
  <tr>
    <td>R</td>
    <td>Roma</td>
  </tr>
  <tr>
    <td>S</td>
    <td>Santiago</td>
  </tr>
  <tr>
    <td>T</td>
    <td>Tripoli</td>
  </tr>
  <tr>
    <td>U</td>
    <td>Upsala</td>
  </tr>
  <tr>
    <td>V</td>
    <td>Valencia</td>
  </tr>
  <tr>
    <td>W</td>
    <td>Washington</td>
  </tr>
  <tr>
    <td>X</td>
    <td>Xanthippe</td>
  </tr>
  <tr>
    <td>Y</td>
    <td>Yokohama</td>
  </tr>
  <tr>
    <td>Z</td>
    <td>Zurich</td>
  </tr>
</table>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

如果您考虑将尝试的初始解决方案合并到一个标准中,则可以实现预期的行为,如下面嵌入的代码段所示。

  1. 定位点创建单独的表格行,分配您的 这些元素各自id
  2. 使用相邻兄弟组合器 Ref +)来 声明伪选择器 :target样式
  3. 使用absolute定位声明您的锚点表格行 使用margin-top属性值来偏移位置而不是 top属性(因为这将定位元素n问题 相对文档最近的包含/父元素relative定位
  4. 代码段示范:

    &#13;
    &#13;
    table {
      border-spacing: 0;
    }
    
    .anchor-row:target + tr {
      color: #ee4444;
    }
    
    .anchor-row {
      position: absolute;
      margin-top: -40px;
    }
    &#13;
    <a href="#D">go to D</a> <a href="#E">go to E</a>
    <table>
      <tr>
        <th>Symbol</th>
        <th>1932 ITU/ICAN Phonetic</th>
      </tr>
      <tr>
        <td>A</td>
        <td>Amsterdam</td>
      </tr>
      <tr>
        <td>B</td>
        <td>Baltimore</td>
      </tr>
      <tr>
        <td>C</td>
        <td>Casablanca</td>
      </tr>
      <tr class="anchor-row" id="D">
        <td colspan="2"></td>
      </tr>
      <tr>
        <td>D</td>
        <td>Denmark</td>
      </tr>
      <tr class="anchor-row" id="E">
        <td colspan="2"></td>
      </tr>
      <tr>
        <td>E</td>
        <td>Edison</td>
      </tr>
      <tr>
        <td>F</td>
        <td>Florida</td>
      </tr>
      <tr>
        <td>G</td>
        <td>Gallipoli</td>
      </tr>
      <tr>
        <td>H</td>
        <td>Havana</td>
      </tr>
      <tr>
        <td>I</td>
        <td>Italia</td>
      </tr>
      <tr>
        <td>J</td>
        <td>Jerusalem</td>
      </tr>
      <tr>
        <td>K</td>
        <td>Kilogramme</td>
      </tr>
      <tr>
        <td>L</td>
        <td>Liverpool</td>
      </tr>
      <tr>
        <td>M</td>
        <td>Madagascar</td>
      </tr>
      <tr>
        <td>N</td>
        <td>New York</td>
      </tr>
      <tr>
        <td>O</td>
        <td>Oslo</td>
      </tr>
      <tr>
        <td>P</td>
        <td>Paris</td>
      </tr>
      <tr>
        <td>Q</td>
        <td>Quebec</td>
      </tr>
      <tr>
        <td>R</td>
        <td>Roma</td>
      </tr>
      <tr>
        <td>S</td>
        <td>Santiago</td>
      </tr>
      <tr>
        <td>T</td>
        <td>Tripoli</td>
      </tr>
      <tr>
        <td>U</td>
        <td>Upsala</td>
      </tr>
      <tr>
        <td>V</td>
        <td>Valencia</td>
      </tr>
      <tr>
        <td>W</td>
        <td>Washington</td>
      </tr>
      <tr>
        <td>X</td>
        <td>Xanthippe</td>
      </tr>
      <tr>
        <td>Y</td>
        <td>Yokohama</td>
      </tr>
      <tr>
        <td>Z</td>
        <td>Zurich</td>
      </tr>
    </table>
    &#13;
    &#13;
    &#13;

答案 1 :(得分:0)

你可以尝试下面这个。

tr:target {
    color: #ee4444;
    position:relative;
    top:0px;
}
span:target {
   color: #ee4444;
   position:relative;
   top:0px;
}

<tr id="D"><td>D</td><td>Denmark</td></tr>
<tr><td><span id="E">hello</span>E</td><td>Edison</td></tr>