显示基于@media 查询格式化为弹性框的 <li>

Posted

技术标签:

【中文标题】显示基于@media 查询格式化为弹性框的 <li>【英文标题】:Show a(n) <li> formated as a flexbox based on @media query 【发布时间】:2018-11-07 11:32:19 【问题描述】:

我无法根据媒体查询显示和隐藏一些 &lt;li&gt; 项目。我有一个 &lt;ul&gt; 元素,它显示为 flexbox,包含 &lt;li&gt; 元素。每个相应的&lt;li&gt; 也显示为弹性框,包含一个图标和文本。我想要两个 &lt;li&gt; 元素(第一个和最后一个)在屏幕宽度为 925px 或更小时显示。然而,这似乎只在&lt;li&gt; 元素不显示为弹性框时才有效。但是,我需要 &lt;li&gt; 元素是弹性框,所以我可以简单地格式化图标和文本。如果&lt;li&gt; 元素被格式化为弹性框,有什么方法可以根据屏幕宽度显示/隐藏&lt;li&gt; 元素?

我在下面的链接中有代码,与本文下面显示的代码相同。 https://codepen.io/anon/pen/XYrxmG

我想在屏幕宽度小于 925px 时显示的 &lt;li&gt; 元素用粉红色背景表示。

     <nav id="navigation">
            <ul id="nav-content">
                <li id="nav-left"></li>
                <li id="op1"><img src="https://via.placeholder.com/30x30"><h2>Option1</h2></li>
                <li id="op2"><img src="https://via.placeholder.com/30x30"><h2>Option2</h2></li>
                <li id="op3"><img src="https://via.placeholder.com/30x30"><h2>Option3</h2></li>
                <li id="op4"><img src="https://via.placeholder.com/30x30"><h2>Option4</h2></li>
                <li id="nav-right"></li>
              </ul>
        </nav>

    * 
      margin: 0px;
      padding: 0px;
      color: black;
    

    #nav-content 
      display: flex;
      flex-direction: row;
      justify-content: flex-start;
      list-style-type: none;
      border: solid 2px black;
    

    // Each list element in nav bar
    #nav-content>li 
      // When this display: flex is turned on, my <li> gets formatted correctly
      // but the pink elements stop showing based on media query
      //display: flex;
      align-items: center;
      padding: 10px 20px 10px 20px;
    

    #nav-content > li:hover 
      background-color: grey;
    

    #nav-left, #nav-right 
      display: none;
      background-color: pink;
    

    @media (max-width: 500px) 
      #nav-left,
      #nav-right 
        display: flex;
      
    

【问题讨论】:

【参考方案1】:

这似乎只是选择器的权重问题:

* 
  margin: 0px;
  padding: 0px;
  color: black;


#nav-content 
  display: flex;
  flex-direction: row;
  justify-content: flex-start;
  list-style-type: none;
  border: solid 2px black;


#nav-content > li 
  display: flex;
  align-items: center;
  padding: 10px 20px 10px 20px;


#nav-content > li:hover 
  background-color: grey;


#nav-content > #nav-left,
#nav-content > #nav-right 
  display: none;
  background-color: pink;


@media (max-width: 925px) 
  #nav-content > #nav-left,
  #nav-content > #nav-right 
    display: flex;
  
<nav id="navigation">
      <ul id="nav-content">
        <li id="nav-left"></li>
        <li id="op1"><img src="http://via.placeholder.com/30x30"><h2>Option1</h2></li>
        <li id="op2"><img src="http://via.placeholder.com/30x30"><h2>Option2</h2></li>
        <li id="op3"><img src="http://via.placeholder.com/30x30"><h2>Option3</h2></li>
        <li id="op4"><img src="http://via.placeholder.com/30x30"><h2>Option4</h2></li>
        <li id="nav-right"></li>
      </ul>
</nav>

修复 & forked pen:

#nav-content > #nav-left,
#nav-content > #nav-right 
  display: none;
  background-color: pink;


@media (max-width: 500px) 
  #nav-content > #nav-left,
  #nav-content > #nav-right 
    display: flex;
  

【讨论】:

以上是关于显示基于@media 查询格式化为弹性框的 <li>的主要内容,如果未能解决你的问题,请参考以下文章

将对象序列化为 JSON,然后使用 NEST 在弹性搜索中发送查询

高分辨率显示的 CSS @media 查询不起作用

8 响应式设计

基于 CSS3 Media Queries 的 HTML5 应用

使用弹性框的居中按钮在 IE 中不起作用 [重复]

使用连字符和弹性框的 Microsoft Edge 错误