【问题标题】:Adding style to CSS Table向 CSS 表添加样式
【发布时间】:2015-08-05 23:52:45
【问题描述】:

我正在将数据库中的数据回显到<table>,但是我试图在每个输出下添加一条渐变线,以显示每个<tr> 输出行之间的中间值。但我无法在<tr> 上获得正确的 CSS。

我已经成功地将我想要的设计放在了<hr> 上:http://jsfiddle.net/ghrw3k8e/

但我希望它在我的表格行(而不是列)之间。

我的 PHP 输出数据:

echo " <tr> 
<td align='center'>".$1." </td> 
<td align='center'>".$2."</td> 
<td align='center'>".$3."</td>
 </tr> ";

【问题讨论】:

  • 我认为这不是一个重复的问题。他想在表格的行之间绘制渐变边框。这里的解决方案是不要在每个&lt;tr&gt; 上使用outline,因为您不能只绘制outline 的底部或顶部。折叠边框应该允许您在行上设置边框,但我认为不可能使用border-image(即使是前缀)在&lt;tr&gt; 上绘制渐变边框。您只能将border-style 值更改为:none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset|initial|inherit

标签: php css html-table


【解决方案1】:

只需使用pseudo-elements。您必须将“边框”放在每个&lt;tr&gt; 的一个&lt;td&gt; 上,因此如果它们都相同width,它的宽度应该等于100 × number_of_columns %

table {
  width: 100%;
  border-collapse: collapse; 
}

td {
  position:relative;   
  width: 33.333333%;
  border: 1px solid transparent;
  text-align:center;
}

tr:not(:last-child) > td:first-child::after {
  content:"";
  position:absolute;
  bottom:-1px;
  left:0;
  height: 1px;
  width:300%;
  background-image: -webkit-linear-gradient(left, rgba(0,0,0,0), rgba(176,0,0,.8), rgba(0,0,0,0));
  background-image:    -moz-linear-gradient(left, rgba(0,0,0,0), rgba(176,0,0,.8), rgba(0,0,0,0));
  background-image:     -ms-linear-gradient(left, rgba(0,0,0,0), rgba(176,0,0,.8), rgba(0,0,0,0));
  background-image:      -o-linear-gradient(left, rgba(0,0,0,0), rgba(176,0,0,.8), rgba(0,0,0,0));
}
<table>
  <tr><td>A</td><td>B</td><td>C</td></tr>
  <tr><td>D</td><td>E</td><td>F</td></tr>
  <tr><td>G</td><td>H</td><td>I</td></tr>
</table>

虽然将它放在&lt;tr&gt; 上似乎更合乎逻辑,但它不会正确定位,正如您可以从规范中看到的那样:http://www.w3.org/TR/CSS21/visuren.html#propdef-position

'position:relative' 对 table-row-group 的影响, 表头组、表页脚组、表行、表列组、 table-column、table-cell 和 table-caption 元素未定义。

这是不正确的代码。您可以看到::after 元素位于页面的最底部:

table {
  width: 100%;
  border-collapse: collapse;
}


tr{
  position:relative;    
}

td {
  width: 33.333333%;
  border: 1px solid transparent;
  text-align: center;
}


tr:not(:last-child)::after {
  content:"";
  position:absolute;
  bottom:-1px;
  left:0;
  height: 1px;
  width:300%;
  background-image: -webkit-linear-gradient(left, rgba(0,0,0,0), rgba(176,0,0,.8), rgba(0,0,0,0));
  background-image:    -moz-linear-gradient(left, rgba(0,0,0,0), rgba(176,0,0,.8), rgba(0,0,0,0));
  background-image:     -ms-linear-gradient(left, rgba(0,0,0,0), rgba(176,0,0,.8), rgba(0,0,0,0));
  background-image:      -o-linear-gradient(left, rgba(0,0,0,0), rgba(176,0,0,.8), rgba(0,0,0,0));
}
<table>
  <tr><td>A</td><td>B</td><td>C</td></tr>
  <tr><td>D</td><td>E</td><td>F</td></tr>
  <tr><td>G</td><td>H</td><td>I</td></tr>
</table>

【讨论】:

  • 完美,正是我想要的,谢谢!! - 我面临的唯一问题是它扩大了第二个“”的宽度,并将第 6 个和第 7 个“ ”推到元素的一侧,大约是正常大小的 15%
  • 那么你的意思是&lt;td&gt;,而不是&lt;tr&gt;。你把&lt;td&gt;s 设置为什么width?在我的示例中,它是33.333333%,因为每行有 3 个。在您的情况下,它应该是100/7 = 14.285714%,或者如果表格具有固定宽度,您也可以将其设置为像素。
  • 是的,我现在明白了,抱歉我没有发帖,因为手头的下一个任务分心了,感谢 Dan 的回复/帮助!非常感谢。
【解决方案2】:

您可以为每一行插入一个额外的行。

hr.soften {
  height: 1px;
  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0), rgba(176, 0, 0, .8), rgba(0, 0, 0, 0));
  background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0), rgba(176, 0, 0, .8), rgba(0, 0, 0, 0));
  background-image: -ms-linear-gradient(left, rgba(0, 0, 0, 0), rgba(176, 0, 0, .8), rgba(0, 0, 0, 0));
  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0), rgba(176, 0, 0, .8), rgba(0, 0, 0, 0));
  border: 0;
}
td {
  width: 200px;
}
<table>
  <tr>
    <td>A</td>
    <td>B</td>
  </tr>
  <tr>
    <td>
      <hr class="soften" />
    </td>
  </tr>
  <tr>
    <td>A</td>
    <td>B</td>
  </tr>
  <tr>
    <td>
      <hr class="soften" />
    </td>
  </tr>
  <tr>
    <td>A</td>
    <td>B</td>
  </tr>
</table>

【讨论】:

  • 这只是添加一个嵌入了“
    ”的新列。我希望该行在中间显示的输出数据是: echo " ".$1." ".$2." td> ".$3." ";
  • 您应该在包含&lt;hr&gt;&lt;td&gt; 上使用position: relative,在&lt;hr&gt; 上使用position: absolute 将其扩展到所有列,或者在@ 上使用colspan 属性987654329@。但是,我认为这在语义上并不完全正确。
猜你喜欢
相关资源
最近更新 更多
热门标签