【问题标题】:What is overriding my @media queries preventing the breakpoints from applying?是什么覆盖了我的@media 查询以阻止应用断点?
【发布时间】:2017-02-04 16:06:39
【问题描述】:

第一次发帖,请见谅,并告诉我这里发帖的不正确之处,非常感谢。

尝试通过 Coursera 课程“HTML, CSS, and Javascript for Web Developers”的示例制作简单的网站。我将首先发布已给出的目标和图像,然后是我的html/css,然后是完全一团糟的第二个版本(如果需要,请在以后的帖子中建议如何更好地做到这一点。没有Bootstrap 或任何其他frameworks 在这个项目中是允许的。

试图缩小页面fully responsive,而不是只为每个媒体尺寸使用特定的像素尺寸。忽略字体大小等其他最可能出现的错误(除非您想就我做错的所有事情给我建议,我会欢迎的)。重点是让 100% 宽度的三宽容器的“行”下降到两行,第一行有 2 个containers 100% 宽度,第二行有 1 个 100% 宽度的容器。然后再次缩小到三行,每行 1 个 100% 宽的容器。所有这些在下面链接的项目目标中都有更详细的说明。

我遇到的另一个问题是当前版本中最后一个容器之后右侧的多余空间,当我找不到导致它的原因时,我将边距设置为 0,容器宽度设置为 100%。

我尝试通过为它们指定不同的 col 类和基本宽度来创建 css grid,然后让 @media 更改这些而不做任何更改。

项目说明(位于https://github.com/jhu-ep-coursera/fullstack-course4/blob/master/assignments/assignment2/Assignment-2.md

Example Page To Create

我的 HTML:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Assignment Solution for Module 2</title>
    <link href="https://fonts.googleapis.com/css?family=Raleway|Roboto|Sansita" rel="stylesheet">
    <link rel="stylesheet" type="text/css" href="css/styles.css">
</head>

<body>
<h1>Our Menu</h1>

<div id="container">
<!-- Chicken Container -->
    <div id="op-1" class="menu">
        <div class="food-type chicken">Chicken
        </div>

            <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.</p>
    </div>

<!-- Beef Container -->
    <div id="op-2" class="menu">
        <div class="food-type beef">Beef
        </div>
            <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.</p>
    </div>


<!-- Sushi Container -->
    <div id="op-3" class="menu">
        <div class="food-type sushi">Sushi
        </div>
        <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.</p>
    </div>

</div>
</body>
</html>

我的 CSS

/* CSS Reset */

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed, 
figure, figcaption, footer, header, hgroup, 
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
    margin: 0;
    padding: 0;
    border: 0;
    font-size: 100%;
    font: inherit;
    vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure, 
footer, header, hgroup, menu, nav, section {
    display: block;
}
body {
    line-height: 1;
}
ol, ul {
    list-style: none;
}
blockquote, q {
    quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
    content: '';
    content: none;
}
table {
    border-collapse: collapse;
    border-spacing: 0;
}

/*===============================================
 My CSS Styles
 =============================================== */
* {
    box-sizing: border-box;
}


body {
    background: #fff;
    box-sizing: border-box;
    font-family: raleway; roboto; ransita; sans-serif;
    font-size: 200%;
    margin: 0;
}


h1 {
   text-align: center;
   font-weight: bold;
   margin: 30px 0 50px 0;
}

#container {
    width: 100%;
    max-width: 100%;
    margin: 0px;
    padding: 10px;
     /*display: flex;
    justify-content: space-between; */
}

.menu {
    float:left;
    width:30%;
    margin: 10px;
    background: grey;
    border: 1px solid #000; 
    font-size: .75em;
    position: relative;
}
/*
div.foo {
    background: grey;
    border: 1px solid #000; 
    font-size: .75em;
    position: relative;
}
*/

div.food-type {
    text-align: center;
    font-weight: bold;
    padding: 10px;
    width: 30%;
    position: relative;
    float: right;
    /*left: 70%;*/
    border-bottom: 1px solid #000;
    border-left: 1px solid #000;
}

div.chicken {
    background: pink;
}

div.beef {
    background: red;
    color: #fff;
}

div.sushi {
    background: yellow;
}

p {
    color: #fff;
    padding: 10px;
    font-size: .75em;
    clear: right;
}

@media all (min-width: 992px) {
     .menu {width: 33.33%;}
}

@media all (min-width: 768px) and (max-width: 991px) {
    #op-1.menu #op-2.menu {width: 50%;}
    #id-3.menu {width: 100%;}
}

@media all (max-width: 767px) {
     .menu {width: 100%;}
}

第 2 版尝试使用 CSS Grid- HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Assignment Solution for Module 2</title>
    <link href="https://fonts.googleapis.com/css?family=Raleway|Roboto|Sansita" rel="stylesheet">
    <link rel="stylesheet" type="text/css" href="css/styles2.css">
</head>
<body>
<h1>Our Menu</h1>
<div id="grid-container">
<!-- Chicken Container -->
<div id="op-1" class="menu col-2 col-3 col-6">
  <div class="food-type chicken">
  Chicken
  </div>

    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.</p>
</div>

<!-- Beef Container -->
<div id="op-2" class="menu col-2 col-3 col-6">
    <div class="food-type beef">
Beef
    </div>
        <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.</p>
</div>

<!-- Sushi Container -->
<div id="op-3" class="menu op-3 col-2 col-3 col-6">
<div class="food-type sushi">
Sushi
</div>
    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.</p>
</div>
</div>



</body>
</html>

CSS:

/* CSS Reset */

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed, 
figure, figcaption, footer, header, hgroup, 
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
    margin: 0;
    padding: 0;
    border: 0;
    font-size: 100%;
    font: inherit;
    vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure, 
footer, header, hgroup, menu, nav, section {
    display: block;
}
body {
    line-height: 1;
}
ol, ul {
    list-style: none;
}
blockquote, q {
    quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
    content: '';
    content: none;
}
table {
    border-collapse: collapse;
    border-spacing: 0;
}

/*===============================================
 My CSS Styles
 =============================================== */
* {
    box-sizing: border-box;
}


body {
    background: #fff;
    box-sizing: border-box;
    font-family: raleway; roboto; ransita; sans-serif;
    font-size: 200%;
    margin: 0;
}


h1 {
   text-align: center;
   font-weight: bold;
   margin: 30px 0 50px 0;
}



.menu {
    float:left;
    width:30%;
    margin: 0px;
    background: grey;
    border: 1px solid #000; 
    font-size: .75em;
    position: relative;
}  

div.food-type {
    text-align: center;
    font-weight: bold;
    padding: 10px;
    width: 30%;
    position: relative;
    float: right;
    /*left: 70%;*/
    border-bottom: 1px solid #000;
    border-left: 1px solid #000;
}

div.chicken {
    background: pink;
}

div.beef {
    background: red;
    color: #fff;
}

div.sushi {
    background: yellow;
}

p {
    color: #fff;
    padding: 10px;
    font-size: .75em;
    clear: right;
}

.grid-container {
    width: 100%;
    max-width: 100%;
    padding: 12px;
}

 /*
    .row:before, 
    .row:after {
        content:"";
          display: table ;
        clear:both;
    }
*/


    [class*='col-'] {
        float: left; 
        min-height: 1px; 
        width: 33.33%; 
        padding: 12px;
    }

/*
    .col-1{ width: 16.66%; } 
    .col-2{ width: 33.33%; }
    .col-3{ width: 50%;    }
    .col-4{ width: 66.66%; }
    .col-5{ width: 83.33%; }
    .col-6{ width: 100%;   }  */

@media all (min-width: 992px) {
     .col-2 {width: 33.33%;}
}

@media all (min-width: 768px) and (max-width: 991px) {
    #id-1 #id-2 .col-3 {width: 50%;}
    #id-3 .col-6 {width: 100%;}
}

@media all (max-width: 767px) {
     #id-1 #id-2 #id-3 {width: 100%;}
}

非常感谢,抱歉说了这么多,再次请让我知道如何改进以后的帖子。

【问题讨论】:

  • 尝试检查 chrome 检查器。您会清楚地看到哪个规则覆盖了您的媒体查询。
  • 我对 chrome 检查器还是很陌生,但是我已经检查了所有内容,可以看到应用了哪些东西,哪些东西被覆盖了,我就是不知道为什么。

标签: html css responsive-design media-queries


【解决方案1】:

您的媒体查询中有两个问题:在第二个媒体查询中缺少规则之间的“and”和选择器 #op-1.menu 和 $op-2.menu 之间的逗号 (,)。

这里是更正的媒体查询

@media all and (min-width: 992px) {
    .menu {width: 30%;}
}

@media all and (min-width: 768px) and (max-width: 991px) {
    #op-1.menu, #op-2.menu {width: 47%;}
    #op-3.menu {width: 100%;}
}

@media all and (max-width: 767px) {
    .menu {width: 100%;}
}

【讨论】:

  • 我用“all”这个词添加了正确的语法(感谢您指出这一点!)但是我没有在我的代码中看到前面提到的逗号。该页面现在是响应式的,从 3 个容器宽到所有三个堆叠......但我仍然缺少中等屏幕版本,其中两个容器跨越第一行,第二行的最后一个容器以 100% 宽度。
  • 您需要对两个元素应用相同的 css 规则,在这种情况下,您需要用逗号分隔这些元素(选择器)(#op-1.menu, #op-2.menu)
  • 巨大的改进!它现在正在制作正确的断点,谢谢!中型版本的底部 div 宽度 100% 跨越整个宽度,没有像前两个那样的边距,这很奇怪,因为我在前两个右侧有额外的空间,我无法摆脱但底部一个没有有它。但是,我最初的媒体查询无法正常运行的问题已经通过所提供的更改得到解决,所以我会在再次从你们所有人那里拉出来之前尝试自己解决这个问题。非常感谢,这个论坛很棒,改变了生活。
【解决方案2】:

如果您使用带有min-width 的媒体查询,则 css 中的顺序是从小到大宽度,否则如果依靠max-width,您必须从大屏幕到小屏幕。

解决方案: 每当您使用媒体查询时,请注意 css 中的顺序,使其级联而不是覆盖自己。当您使用min-width 作为参数时,切换媒体查询的顺序,使其从小屏幕变为大屏幕。

【讨论】:

  • 不是按那个顺序写的吗?媒体所有(最小宽度:992px){.menu {宽度:33.33%;}}媒体所有(最小宽度:768px)和(最大宽度:991px){#op-1.menu #op-2.menu {width: 50%;} #id-3.menu {width: 100%;} } media all (max-width: 767px) { .menu {width: 100%;} }
【解决方案3】:

没有一个媒体查询在语法上是正确的。

@media all (min-width: 992px) {

应该是的

@media all and (min-width: 992px) {

【讨论】:

    【解决方案4】:

    您已经像这样定义@media 查询:

    @media all and (min-width: 992px) { ... }
    

    @media all 后缺少“and”关键字

    那里有一些要点,例如根据每个菜单框左/右侧的 10px 边距查找实际宽度。例如,当所有 3 个框在大屏幕尺寸下都可见时,我们可以将宽度设置为:

    width: calc( (100% - 60px) / 3 ); /* 60px is 3*20, ( 20px = 10+10 Left+Right Margins) */
    

    我将您的代码修改如下:

    * {
        box-sizing: border-box;
    }
    
    
    body {
        background: #fff;
        box-sizing: border-box;
        font-family: raleway, roboto, ransita, sans-serif; /* **change ; to , */
        font-size: 200%;
        margin: 0;
    }
    
    h1 {
       text-align: center;
       font-weight: bold;
       margin: 30px 0 50px 0;
    }
    
    #container {
        width: 100%;
        max-width: 100%;
        margin: 0px;
        padding: 10px;
         /*display: flex;
        justify-content: space-between; */
    }
    
    .menu {
        float:left;
        width:30%;
        margin: 10px;
        background: grey;
        border: 1px solid #000; 
        font-size: .75em;
        position: relative;
    
        /*box-sizing: border-box;*/
    }
    
    /*
    div.foo {
        background: grey;
        border: 1px solid #000; 
        font-size: .75em;
        position: relative;
    }
    */
    
    div.food-type {
        text-align: center;
        font-weight: bold;
        padding: 10px;
        width: 40%; /* *** */
        /*position: relative;*/
        float: right;
        /*left: 70%;*/
        border-bottom: 1px solid #000;
        border-left: 1px solid #000;
    }
    
    div.chicken {
        background: pink;
    }
    
    div.beef {
        background: red;
        color: #fff;
    }
    
    div.sushi {
        background: yellow;
    }
    
    p {
        color: #fff;
        padding: 10px;
        font-size: .75em;
        clear: right;
    }
    
    @media all and (min-width: 992px) { /* width > 992px */
          .menu {width: calc( (100% - 60px) / 3 ); } /* 31% */
    }
    
    @media all and (min-width: 768px) and (max-width: 991px) { /* 768px < width < 991px  */
        #op-1.menu {width: calc( (100% - 40px) / 2 );} /* 47% */
        #op-2.menu {width: calc( (100% - 40px) / 2 );}
        #op-3.menu {width: calc(100% - 20px);}
    }
    
    @media all and (max-width: 767px) { /* width < 768px  */
          .menu {width: calc(100% - 20px);}
    }
      <h1>Our Menu</h1>
    
      <div id="container">
        <!-- Chicken Container -->
        <div id="op-1" class="menu">
          <div class="food-type chicken">
            Chicken
          </div>
    
          <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.</p>
        </div>
    
        <!-- Beef Container -->
        <div id="op-2" class="menu">
          <div class="food-type beef">
            Beef
          </div>
          <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.</p>
        </div>
    
    
        <!-- Sushi Container -->
        <div id="op-3" class="menu">
          <div class="food-type sushi">
            Sushi
          </div>
          <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.</p>
        </div>
    
      </div>

    【讨论】:

    • 我将 div.food-type 的宽度设置为 30%,以使带有食物标题的框为包含该段落的容器大小的 1/3
    • 在我的代码中,边距被考虑到具有相似的精确间距!
    • 感谢您向我展示了一种新方法!我还不知道它背后的逻辑,因为我只是在测试它,但肯定会了解它。它确实修复了右侧的额外空间,但现在大版本不适合所有三个。我假设它们只是超出了总宽度限制,我应该使用数学公式来尝试减小它们的宽度以使其适合吗?
    • 我对其进行了测试,它在宽屏幕尺寸下工作,所有 3 列都彼此相邻,但它可能在您的 html 代码或浏览器中...您可以先测试calc( (100% - 60px) / 3 - 2px); @media ?
    • 这导致它们像在最小版本中一样全部堆叠。我一直在第一个@media 公式中使用不同的值,但似乎没有什么不同。计算((100% - 600px)/3);甚至没有影响它。 (我只是抛出了一个巨大的数字,看看是否有任何变化。这让我相信我的 HTML 或其他部分代码有问题。
    【解决方案5】:

    这是我的另一个答案,为菜单框项添加父 div 并使用其 padding 而不是 margin 用于内部菜单框。这种方法的主要优点是所有尺寸(33.33%、50%、100%)都可以设置为我们需要的精确值(参见@mediawidths),而无需使用特殊的估计值或计算公式或javascript ...

    body {
        background: #fff;
        box-sizing: border-box;
        font-family: raleway, roboto, ransita, sans-serif; /* **change ; to , */
        font-size: 200%;
        margin: 0;
    }
    
    h1 {
       text-align: center;
       font-weight: bold;
       margin: 30px 0 50px 0;
    }
    
    #container {
        width: 100%;
        max-width: 100%;
        margin: 0px;
        padding: 10px;
        box-sizing: border-box; /* apply it to main container */
    }
    
    .menu { /* menu external box */
      float: left;
      padding: 10px; /* instead of inner menu margin */
      width: 33.33%; /* just a default width for case we are at large screens */
      box-sizing: border-box; /* apply it to main container */
    }
    
    .menu > div { /* menu internal box (menu-child) */
        /*float:left;*/ /* EDIT! moved to parent div */
        width:100%; /* EDIT! fill whole of parent, the size is set by parent */
        /*margin: 10px;*/ /* EDIT! set by padding of parent div */
        background: grey;
        border: 1px solid #000; 
        font-size: .75em;
    }
    
    
    div.food-type {
        text-align: center;
        font-weight: bold;
        padding: 10px 5px; /* padding-left & right could be less as we center title text */
        width: 40%; /* or width: auto; min-width: 33%; to ensure large titles not overflow the width size */
        float: right;
        border-bottom: 1px solid #000;
        border-left: 1px solid #000;
    }
    
    div.chicken {
        background: pink;
    }
    
    div.beef {
        background: red;
        color: #fff;
    }
    
    div.sushi {
        background: yellow;
    }
    
    p {
        color: #fff;
        padding: 10px;
        font-size: .75em;
        clear: right;
    }
    
    
    @media all and (min-width: 992px) { /* width > 992px */
      .menu { width:33.33%; padding:10px; float:left;}
    }
    
    @media all and (min-width: 768px) and (max-width: 991px) { /* 768px < width < 991px  */
      #op-1.menu {width: 50%;}
      #op-2.menu {width: 50%;}
      #op-3.menu {width: 100%;}
    }
    
    @media all and (max-width: 767px) { /* width < 768px  */
      .menu {width: 100%;}
    }
    <h1>Our Menu</h1>
    
      <div id="container">
        <!-- Chicken Container -->
    
        <div id="op-1" class="menu">
          <div> <!-- class="menu-child" -->
            <div class="food-type chicken">
              Chicken
            </div>
    
            <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.</p>
          </div>
        </div>
    
        <!-- Beef Container -->
        <div id="op-2" class="menu">
          <div> <!-- class="menu-child" -->
            <div class="food-type beef">
              Beef
            </div>
            <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.</p>
          </div>
        </div>
    
    
        <!-- Sushi Container -->
        <div id="op-3" class="menu">
          <div> <!-- class="menu-child" -->
            <div class="food-type sushi">
              Sushi
            </div>
            <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.</p>
          </div>
    
        </div>
      </div>

    【讨论】:

    • 请检查这个新答案,并提供您的反馈
    猜你喜欢
    • 2019-05-26
    • 2022-01-14
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多