【问题标题】:<td> taking up space when using display: none<td> 使用 display: none 时占用空间
【发布时间】:2016-07-19 19:58:04
【问题描述】:

我是媒体查询的新手,对 .net 总体来说还很陌生,也许我已经盯着这段代码太久了,所以请善待。

我试图让第一个 td 在最大宽度 775px 处完全消失,并用第二个 td 替换它。似乎第一个 td 刚刚变得“不可见”,但仍在占用空间。 我添加边框仅作为视觉辅助。 任何帮助将不胜感激!

@media screen and (min-width:776px) {
  .hidey {
    border: 1px solid blue;
  }
  .hidey2 {
    display: none;
    border: 1px dashed red;
  }
}
@media screen and (max-width:775px) {
  .hidey {
    border: 1px dashed blue;
    display: none;
  }
  .hidey2 {
    border: 1px solid red;
  }
}
<table>
  <tr>
    <th>Blah:</th>
    <td class="hidey" style="width: 20em; "><span>td one</span>
    </td>
    <td class="hidey2" style="width: 20em;"><span>td two</span>
    </td>
  </tr>
</table>

View 1

View 2, with unwanted space

【问题讨论】:

  • 有什么理由让您拥有@@media 而不仅仅是@media?此外,您有一个关闭 &lt;/span&gt; 元素,没有任何打开 &lt;span&gt; 标记,这可以解释您的问题。
  • 按预期工作(@media 有一个 at-sign):jsfiddle.net/brfssy24 您必须展示一个复制该行为的演示。您可能没有隐藏列中的所有单元格。
  • @Jujucat 在 CSS 中,@ 不会转义,@@ 无效。
  • 如果您在 ASP.NET Razor 视图(或类似的视图)中使用它,那么它可能是一种逃避。但是,即使没有这个,我似乎也无法通过额外的间距重现您的问题。
  • 发布带有语法错误的问题,修复后不会重现问题,是吸引反对票的好方法。

标签: html css razor


【解决方案1】:

标记和语法无效

由于以下原因,您的标记可能存在问题:

  • 您在媒体查询前使用 @@media 而不仅仅是 @media,这在大多数情况下都是无效的(在 ASP.NET Razor 视图之类的情况下转义除外)。
  • 您的&lt;td&gt; 元素中有关闭的&lt;/span&gt; 元素,而没有任何打开的&lt;span&gt; 元素,这也是无效的。

此外,您还可以合并查询:

@media screen and (min-width:776px) {
  .hidey { border: 1px solid blue; }
  .hidey2 { display: none; border: 1px dashed red; }
}
@media screen and (max-width:775px) {
  .hidey { border: 1px dashed blue;  display: none; }
  .hidey2 { border: 1px solid red; }
}

示例

即使在 an MVC Razor View as seen in this interactive example 中,您的示例代码似乎也能按预期工作,并在下面演示:

@media screen and (min-width:776px) {
  .hidey { border: 1px solid blue; }
  .hidey2 { display: none; border: 1px dashed red; }
}
@media screen and (max-width:775px) {
  .hidey { border: 1px dashed blue;  display: none; }
  .hidey2 { border: 1px solid red; }
}
<table>
  <tr>
    <th>Blah:</th>
    <td class="hidey" style="width: 20em; "><span>td one</span></td>
    <td class="hidey2" style="width: 20em;"><span>td two</span></td>
  </tr>
</table>

【讨论】:

  • 是的,我之前已经纠正了跨度问题。那是一个复制/粘贴问题。我的错。需要双@,因为我处于剃刀视图中。不幸的是,代码仍然不适合我。我确定您需要查看更多我的代码才能形成正确的答案。我只是希望我在发布的代码中犯了一个错误。不幸的是,我没有。 :(
  • 多行不应该有区别,因为您的媒体查询将应用于 &lt;td&gt; 元素的类。有什么方法可以截取您所指的问题,因为在提议的更改之后我并没有看到太多错误。
  • 我添加了截图。希望这就是你所追求的。
  • 如果没有准确的标记来重现它,仍然有点难以分辨。乍一看,这可能是与缺少标签有关的问题,但几乎不可能说出来。对不起。
  • 嗯,感谢您的关注。谢谢。
【解决方案2】:
<style>
    @media only screen {
        .hidey1 {
            display: none;
        }
        .hidey2 {
            display: table;
        }
    }

    @media only screen and (min-width: 775px) {
        .hidey1 {
            display: table;
        }
        .hidey2 {
            display: none;
        }
    }
</style>  

<table>
    <tr>
        <td class="hidey1">td one</td>
        <td class="hidey2">td two</td>
    </tr>
</table>

【讨论】:

  • 欢迎来到 StackOverflow。虽然粘贴的一段代码可能是也可能不是问题的有效解决方案,但做出答案可能还需要提供解释和上下文。请阅读answering上的帮助文件。
猜你喜欢
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-02
  • 1970-01-01
  • 1970-01-01
  • 2023-02-16
  • 1970-01-01
相关资源
最近更新 更多