CSS 样式 td 元素取决于 td 宽度

Posted

技术标签:

【中文标题】CSS 样式 td 元素取决于 td 宽度【英文标题】:CSS style td elements depending on td width 【发布时间】:2018-01-03 11:41:47 【问题描述】:

td 中有两个固定宽度的元素。在桌面上它们彼此相邻显示,而在较小的显示器上,它们会被包裹起来,因此第二个元素位于第一个元素的下方。

我如何仅在第二个元素(第二个红色 div)显示在第一个元素下方时才定位它?

示例:

table 
  border: 1px solid #000;

table td:nth-child(1) div 
  background: red;
  display: inline-block;
  height: 20px;
  width: 20px;
  margin: 10px;

table td:nth-child(2) div 
  background: #777;
  display: inline-block;
  height: 20px;
  width: 200px;

.two 
width: 100px;
Table 1:
<table>
  <tr>
    <td><div></div><div></div></td>
    <td><div></div></td>
  </tr>
</table>
<br>
Table 2:
<table class="two">
  <tr>
    <td><div></div><div></div></td>
    <td><div></div></td>
  </tr>
</table>

【问题讨论】:

在您的实际场景中,表格和红色 div 是否总是固定宽度(或者可能是)? 【参考方案1】:

您的 html 和 CSS 不“了解”您的页面当前的外观,因此您不能根据第二个 div 是否包裹在第一个 div 下方来直接定位它们。

您可以做的是弄清楚它们何时包装,然后使用媒体查询。

通过在body 标签上设置max-width 在 Chrome 的控制台中玩耍,我发现它们直到 334 像素宽才换行。

所以你的样式看起来像这样:

@media all and (max-width: 334px) 
  td.WiFi div:nth-child(2) 
    border: 2px solid red; /* or whatever */
  

现在,如果您为表格本身和/或其中的某些列设置了固定值,那么当一切都不适合时,您也许可以通过数学方法计算出,并将其用作您的媒体查询。但是我看不到使用当前样式在您的网站上执行此操作的方法,因为唯一具有固定宽度的东西是 SVG,其他一切都是百分比。所以整个事情是非常灵活的,直到它绝对必须包装它才会包装。不过不用担心,这通常是件好事。

您可能会遇到问题的唯一边缘情况是,如果您的字体没有正确加载,因此用户看到了带有一些备用字体的页面,因为现在您的列换行点基本上取决于宽度其他列中的文本恰好是。如果使用了不同的字体,您可能会得到不同的断点,这可能会也可能不会导致几个像素的布局中断。

不过,这对您来说可能不是一个实际问题,因为没有人会在桌面上以 334 像素宽(即具有可调整窗口大小的设备)查看您的网站,而手机基本上是 360 像素以上或 320 像素宽. 330 和 340 中的潜在问题区域实际上并不存在。

【讨论】:

假设这将是答案,我将诉诸“混乱”的 javascript hack 对不起,我对你没有任何魔法。您拥有的另一个选择是尝试在某个时候强制换行,然后再次使用媒体查询。我不知道,这可能比 JavaScript 复杂,也可能不复杂。祝你好运!

以上是关于CSS 样式 td 元素取决于 td 宽度的主要内容,如果未能解决你的问题,请参考以下文章

jsp设置<td>宽度问题

带有输入元素的td的css选择器[重复]

带有输入元素的td的css选择器[重复]

如何用CSS 定制表格单元格的宽度和高度

CSS边框样式

表格在固定表头遇到样式问题