【问题标题】:Media queries, Table cant be responsive?媒体查询,表格无法响应?
【发布时间】:2018-01-09 00:12:36
【问题描述】:

网站管理员工具说表格 TD,TH 在 360 像素或更小的屏幕上有 100%,但它看起来不是那样的。我的问题在哪里?谢谢你的建议。对于现场测试,您可以访问我正在尝试制作的网站。 http://martinpodlesak.com/test4/ 我的代码:

<table id="hlstr">
        <tr>
            <td>
                <h2>Agentura Martina Podleďešáka</2>
                    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
                    <p>Vestibulum justo nibh, pharetra vitae commodo eget, hendrerit sed velit.</p>
                    <p>Vestibulum sapien orci, aliquet rhoncus lacus ac, rutrum laoreet nunc. </p>
                    <p> Mauris viverra luctus volutpat. Praesent erat sem, luctus ac ornare ut, molestie eu quam.</p>
            <td>
                <h2>Co děláme?</h2>
                   <p><a href="http://www.google.com/"></a><button class="button10"><a href="#">Úloha 1</a><p></p></button></p>
                   <p><a href="http://www.google.com/"></a><button class="button10"><a href="#">Úloha 2</a><p></p></button></p>
                   <p><a href="http://www.google.com/"></a><button class="button10"><a href="#">Úloha 3</a><p></p></button></p>
                   <p></p>
            </td>        
            <td> 
                <a class="twitter-timeline" data-lang="cs" data-width="315" data-height="300" href="https://twitter.com/podlesakmartin">Tweets by podlesakmartin</a> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
            </td>
        </tr>


    </table>

CSS

    table#hlstr td, th
    {
      width: 30%;
    }
    table#hlstr h2 {
        font-size: 15px;
    }

    table#hlstr p {
    font-size: 12px;}
@media only screen and (max-width: 360px) {
    button.w3-button.demo {height: 29.3px;}
    table#hlstr td,th {width: 100%;}

}

【问题讨论】:

  • 此代码已损坏 - 未关闭的标签 - 错误输入的标签。 #hlstr 与 id 一样糟糕...没有人,但您会知道它的含义...这不是表数据。您正在尝试使用表格进行布局,但您不应该这样做。如果它不是数据表......那么你只是不使用表。如果您使用任何其他选项来获得所需的布局,将会容易得多。
  • 我投票结束这个问题,因为标记无效。
  • 作为 Web 开发人员,请勿使用表格进行布局。从字面上看,其他任何东西都更好。

标签: css responsive-design html-table media-queries


【解决方案1】:

如果您绝对必须使用表格进行布局...绝不是这种情况,那么您必须告诉表格为display: block; 而不是display: table; 表格单元格将尝试并保持其形式和让所有的细胞都适合。如果你想强制它表现不同,那么你必须告诉它不要成为一张桌子。不只是桌子,还有孩子。听起来很傻,对吧?那是因为这将是一种奇怪的方式来获得你想要的布局。

&lt;p&gt;&lt;a href="http://www.google.com/"&gt;&lt;/a&gt;&lt;button class="button10"&gt;&lt;a href="#"&gt;Úloha 1&lt;/a&gt;&lt;p&gt;&lt;/p&gt;&lt;/button&gt;&lt;/p&gt;

p > 没有任何内容的链接...和一个按钮,里面有一个链接,然后是另一个段落...我认为这个地方需要再看看。



我敦促你这样想:

标记

<section class='my-meaningfully-named-section'>

  <div class='some-copy'>
    <h2>Some copy</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
    <p>Vestibulum justo nibh, pharetra vitae commodo eget, hendrerit sed velit.</p>
    <p>Vestibulum sapien orci, aliquet rhoncus lacus ac, rutrum laoreet nunc. </p>
    <p>Mauris viverra luctus volutpat. Praesent erat sem, luctus ac ornare ut, molestie eu quam.</p>
  </div>

  <div class='some-buttons'>
    <h2>Some buttons</h2>
    <button>Button 1</button>
    <button>Button 2</button>
    <button>Button 3</button>
  </div>

  <div class='twitter-stuff'>
    <h2>Twitter stuff</h2>
    <a class="twitter-timeline" data-lang="cs" data-width="315" data-height="300" href="https://twitter.com/podlesakmartin">Tweets by podlesakmartin</a><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
  </div>

</section>


样式

/* all the divs are already 100% width... because they are block-level elements */

.my-meaningfully-named-section .some-copy {
  background: red;
}
.my-meaningfully-named-section .some-buttons {
  background: lightblue;
}
.my-meaningfully-named-section .twitter-stuff {
  background: yellow;
}



@media (min-width: 600px) { /* break-point-1 */

  .my-meaningfully-named-section {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
  }
  .my-meaningfully-named-section .some-copy {
    flex-basis: 100%;
  }
  .my-meaningfully-named-section .some-buttons {
    flex-basis: 50%;
  }
  .my-meaningfully-named-section .twitter-stuff {
    flex-basis: 50%;
  }

}



@media (min-width: 900px) { /* break-point-2 */

  .my-meaningfully-named-section .some-copy {
    flex-basis: 30%;
    flex-grow: 1;
  }
  .my-meaningfully-named-section .some-buttons {
    flex-basis: auto;
  }
  .my-meaningfully-named-section .twitter-stuff {
    flex-basis: 300px;
  }

}

https://jsfiddle.net/sheriffderek/1h9051be/

【讨论】:

    【解决方案2】:

    众所周知,表格很难响应式地使用,因为它们的设计不是为了扩展。我建议以较小的宽度切换表格的display,使其由块级元素组成:

    @media only screen and (max-width: 360px) {
      table, td, tr {
        display: block;
        width: 100%;
      }
    }
    

    使用display: block 将允许您根据自己的喜好操作表格内容。上面的代码使每一行在小于360px 处占据屏幕宽度的 100%。随意调整宽度,甚至 float 它们,以便根据自己的喜好修改布局。

    请注意,在以下示例中,我已将媒体查询宽度修改为 700px,以便在 sn-p 中演示这一点。片段也不能包含 Twitter 时间线。如需可调整大小窗口中的完整示例,请查看this JSFiddle

    table#hlstr td,
    th {
      width: 30%;
    }
    
    table#hlstr h2 {
      font-size: 15px;
    }
    
    table#hlstr p {
      font-size: 12px;
    }
    
    @media only screen and (max-width: 360px) {
      button.w3-button.demo {
        height: 29.3px;
      }
      table#hlstr td,
      th {
        width: 100%;
      }
    }
    
    /* New */
    @media only screen and (max-width: 700px) {
      table,
      td,
      tr {
        display: block;
        width: 100%;
      }
    }
    <table id="hlstr">
      <tr>
        <td>
          <h2>Agentura Martina Podleďešáka</h2>
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
          <p>Vestibulum justo nibh, pharetra vitae commodo eget, hendrerit sed velit.</p>
          <p>Vestibulum sapien orci, aliquet rhoncus lacus ac, rutrum laoreet nunc. </p>
          <p> Mauris viverra luctus volutpat. Praesent erat sem, luctus ac ornare ut, molestie eu quam.</p>
          <td>
            <h2>Co děláme?</h2>
            <p>
              <a href="http://www.google.com/"></a>
              <button class="button10"><a href="#">Úloha 1</a>
                <p></p>
              </button>
            </p>
            <p>
              <a href="http://www.google.com/"></a>
              <button class="button10"><a href="#">Úloha 2</a>
                <p></p>
              </button>
            </p>
            <p>
              <a href="http://www.google.com/"></a>
              <button class="button10"><a href="#">Úloha 3</a>
                <p></p>
              </button>
            </p>
            <p></p>
          </td>
          <td>
            <a class="twitter-timeline" data-lang="cs" data-width="315" data-height="300" href="https://twitter.com/podlesakmartin">Tweets by podlesakmartin</a>
            <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
          </td>
      </tr>
    </table>

    希望这会有所帮助! :)

    【讨论】:

    • “因为它们不是按比例设计的”——我很确定这就是它们的确切目的。
    • 不可能通过display: table 来“打破”表格的流动并让一列位于另一列之下。当然,它们会缩小到列缩小的程度,但是当您处理300px 和具有多列的表时,每列中每行只有大约 1 个字母。简单地更改他们的display 会更安全,这样您就可以更轻松地操作它们。我选择只在断点处执行此操作,以便可以在不会太窄的屏幕上维护原始表格布局。
    猜你喜欢
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 2016-07-25
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    相关资源
    最近更新 更多