Warum funktionieren meine CSS3-Medienabfragen nicht?


182

In der Datei styles.css verwende ich Medienabfragen, die beide eine Variation von:

/*--[ Normal CSS styles ]----------------------------------*/

@media only screen and (max-width: 767px) {

    /*--[ Mobile styles go here]---------------------------*/
}

Die Größe der Websites wird in einem normalen Browser (Safari, Firefox) auf das gewünschte Layout angepasst, wenn ich das Fenster verkleinere. Das mobile Layout wird jedoch auf einem Telefon überhaupt nicht angezeigt. Stattdessen sehe ich nur das Standard-CSS.

Kann mich jemand in die richtige Richtung weisen?


3
Um welches Handy handelt es sich? Media Queries ist eine neue Funktion in CSS, die nicht von allen Handys unterstützt wird ...
Sparky

1
iPhone 4 und ich testen auch auf einem Android-Handy (2.2 Froyo) mit einer Auflösung von 320 x 480.
Redconservatory

Eigentlich habe ich auf dem iPhone 4 auf die folgende Medienabfrage umgestellt und es funktioniert (aber ich muss mein CSS ändern, um der höheren Auflösung gerecht zu werden) @media only screen und (-webkit-min-device-pixel-ratio: 2) {}
Redconservatory

Endlich wurde mir klar, dass ich vermisst pxwurde @media (max-width: 320px).
Ryan

In meinem Fall war es, weil die Chrome-Entwicklerkonsole geöffnet war, daher war die Höhe nicht das, was ich dachte
Rabolf

Antworten:


475

Alle drei waren hilfreiche Tipps, aber es sieht so aus, als müsste ich ein Meta-Tag hinzufügen:

<meta content="width=device-width, initial-scale=1" name="viewport" />

Jetzt scheint es sowohl in Android (2.2) als auch auf dem iPhone zu funktionieren ...


59
Eigentlich <meta name = "viewport" content = "width = Gerätebreite, initial-scale = 1">
Lukas Lukac

4
8 Jahre später und das ist immer noch nützlich. Ich habe auch das Meta-Tag übersprungen und konnte keine Medienabfragen in einem Projekt zum Laufen bringen. Viewport Tag und wham, es funktioniert
SoWhat

1
9 Jahre später immer noch so nützlich. Ich kann nicht glauben, dass ich das vergessen habe
Breno Baiardi

@ LukasLukac warum ist das so?
Jonesopolis

68

Vergessen Sie nicht, die Standard-CSS-Deklarationen über der Medienabfrage zu haben, da die Abfrage sonst auch nicht funktioniert.

.edcar_letter{
    font-size:180px;
}

@media screen and (max-width: 350px) {
    .edcar_letter{
        font-size:120px;
    }
}

5
Lassen Sie Ihre CSS-Stile in absteigender Reihenfolge von der Standardgröße zur kleinsten Größe stapeln. Die Regeln gelten weiterhin, wenn Sie alle Medienabfragen in derselben Datei haben.
Phil Andrews

1
Funktioniert für mich auch, wenn ich für diese Klasse keine Standard-CSS-Deklaration habe.
Mason

Dies löste mein Problem. Vielen Dank ... Ich habe die Möglichkeit übersehen, dass mein CSS überschrieben wird.
pmcg521

20

Ich vermute, dass das Schlüsselwort onlyhier das Problem sein könnte. Ich habe keine Probleme mit Medienabfragen wie diesen:

@media screen and (max-width: 480px) { }


20

Ich habe Bootstrap in einer Presseseite verwendet, aber es hat nicht auf IE8 funktioniert. Ich habe css3-mediaqueries.js Javascript verwendet, aber immer noch nicht funktioniert. Wenn Sie möchten, dass Ihre Medienabfrage mit dieser Javascript-Datei funktioniert, fügen Sie Ihrer Medienabfragezeile in CSS einen Bildschirm hinzu

Hier ist ein Beispiel :

<meta name="viewport" content="width=device-width" />


<style>
     @media screen and (max-width:900px) {}
     @media screen and (min-width:900px) and (max-width:1200px) {}
     @media screen and (min-width:1200px) {}
</style>

<link rel="stylesheet" type="text/css" href="bootstrap.min.css">
<script type="text/javascript" src="css3-mediaqueries.js"></script>

CSS-Link-Zeile so einfach wie die obige Zeile.


12

Heute hatte ich eine ähnliche Situation. Medienabfrage hat nicht funktioniert. Nach einer Weile fand ich, dass das Leerzeichen nach 'und' fehlte. Die richtige Medienabfrage sollte folgendermaßen aussehen:

@media screen and (max-width: 1024px) {}

1
Deshalb haben wir CSS-Validatoren. Dies ist für dieses spezielle Problem nicht relevant, da das OP bereits darauf hinweist, dass die Medienabfragen tatsächlich in nicht mobilen Browsern funktionieren.
Cimmanon

4
Fand

4

Die Reihenfolge des CSS-Codes ist ebenfalls wichtig, zum Beispiel:

@media(max-width:600px){
  .example-text{
     color:red;
   }
}
.example-text{
   color:blue;
}

Der obige Code funktioniert aufgrund der ausgeführten Bestellung nicht. Müssen wie folgt schreiben:

.example-text{
   color:blue;
}
@media(max-width:600px){
  .example-text{
     color:red;
   }
}

Das ist der Fehler, den ich gemacht habe. Danke dir.
VorganHaze

4

Erwähnen Sie in einigen Einheiten wie px oder rem immer die maximale und minimale Breite. Das hat es für mich herausgefunden. Wenn ich es ohne das Gerät und nur den Zahlenwert schreibe, kann der Browser die Medienabfragen nicht lesen. Beispiel: Dies ist falsch @ nur Medienbildschirm und (maximale Breite: 950) und dies ist richtig @ nur Medienbildschirm und (maximale Breite: 950px)


Danke dir! Obwohl ich mir alle Beispiele angesehen habe, habe ich nie bemerkt, dass ich den px vergessen habe!
Markand

2

Wirf eine weitere Antwort in den Ring. Wenn Sie versuchen, CSS-Variablen zu verwenden, schlägt dies leise fehl.

@media screen and (max-device-width: var(--breakpoint-small)) {}

CSS-Variablen funktionieren nicht in Medienabfragen (beabsichtigt).


2

Seltsamer Grund, den ich noch nie gesehen habe: Wenn Sie einen Selektor "Eltern> Kind" außerhalb der Medienabfrage (in Firefox 69) verwenden, kann die Medienabfrage beschädigt werden. Ich bin nicht sicher, warum dies passiert, aber für mein Szenario hat dies nicht funktioniert ...

@media whatever {
    #child { display: none; }
}

Wenn Sie jedoch das übergeordnete Element hinzufügen, um es mit einem anderen CSS weiter oben auf der Seite abzugleichen, funktioniert dies ...

#parent > #child { display: none; }

Es scheint, als ob die Angabe des übergeordneten Elements keine Rolle spielen sollte, da eine ID sehr spezifisch ist und keine Mehrdeutigkeit bestehen sollte. Vielleicht ist es ein Fehler in Firefox?


2

Das Code-Snippet des OP verwendet eindeutig das richtige Kommentar-Markup, aber CSS kann progressiv unterbrochen werden. Wenn also ein Syntaxfehler auftritt, schlägt wahrscheinlich alles danach fehl. Ein paar Mal habe ich mich auf vertrauenswürdige Quellen verlassen, die ein falsches Kommentar-Markup geliefert haben , das mein Stylesheet beschädigt hat. Da das OP nur einen kleinen Teil seines Codes bereitstellte, würde ich Folgendes vorschlagen:

Stellen Sie sicher, dass alle Ihre CSS-Kommentare dieses Markup verwenden /*... */- Dies ist das richtige Kommentar-Markup für CSS gemäß MDN

Validieren Sie Ihr CSS mit einem Linter oder einem sicheren Online-Validator. Hier ist einer von W3

Weitere Informationen: Ich habe die neuesten empfohlenen Haltepunkte für Medienabfragen von Bootstrap 4 überprüft und die Kesselplatte direkt aus den Dokumenten kopiert. Fast jeder Codeblock war mit Kommentaren im Javascript-Stil beschriftet //, die meinen Code brachen - und mir nur kryptische Kompilierungsfehler zur Fehlerbehebung gaben, die mir damals über den Kopf gingen und mich traurig machten.

Mit dem IntelliJ-Texteditor konnte ich bestimmte Zeilen von CSS in einer WENIGER-Datei mit der Tastenkombination Strg + / auskommentieren. Dies war großartig, außer dass //standardmäßig nicht erkannte Dateitypen eingefügt wurden . Es ist keine Freeware und weniger ist ziemlich Mainstream, also habe ich ihm vertraut und mich dafür entschieden. Das hat meinen Code gebrochen. Es gibt ein Einstellungsmenü, um ihm das richtige Kommentar-Markup für jeden Dateityp beizubringen.


1
OP verwendet bereits das richtige Kommentar-Markup, wie im Beitrag gezeigt .
TylerH

Wenn Sie mit der Maus über den Downvote-Button fahren, sehen Sie genau, wofür sie bestimmt sind . Abgesehen davon sind Downvotes 1) anonym und 2) nicht trollend. Darüber hinaus ist das Flammen eines Menschen nicht der Weg, ihn dazu zu bringen, etwas zu ändern, von dem Sie glauben, dass er es getan hat.
TylerH

Oh mein! Du hast meinen Tag gerettet.
Limfinity

1

Ich bin auch kürzlich auf dieses Problem gestoßen und habe später herausgefunden, dass es daran liegt, dass ich kein Leerzeichen zwischen andund gesetzt habe (. Das war der Fehler

@media screen and(max-width:768px){
}

Dann habe ich es geändert, um es zu korrigieren

@media screen and (max-width:768px){
}

1

Das Einfügen eines Meta-Tags wie unten kann dazu führen, dass der Browser das Zoomen des Ansichtsfensters anders behandelt.

<meta content="width=device-width, initial-scale=1" name="viewport" />


0

Ich benutze je nach Methode ein paar Methoden. Im selben Stylesheet verwende ich: @media (max-width: 450px) oder stelle sicher, dass der Link korrekt in der Kopfzeile ist. Ich habe mir Ihr Fixmeup angesehen und Sie haben eine verwirrende Reihe von Links zu CSS. Es wirkt wie Sie sagen auch auf HTC Wunsch S.


Werfen Sie noch einmal einen Blick auf das CSS, danke ... gut zu wissen, dass es bei etwas funktioniert.
Redconservatory

0
@media all and (max-width:320px)and(min-width:0px) {
  #container {
    width: 100%;
  }
  sty {
    height: 50%;
    width: 100%;
    text-align: center;
    margin: 0;
  }
}

.username {
  margin-bottom: 20px;
  margin-top: 10px;
}

7
Bitte fügen Sie Ihrem Code eine Erklärung hinzu, die zeigt, wie das Problem gelöst wird - dies wird anderen in Zukunft helfen, und Ihre Antwort wird eher positiv bewertet
Unser Mann in Bananen

2
Während dieses Code-Snippet die Frage lösen kann, hilft eine Erklärung wirklich, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage in Zukunft für Leser beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen.
Ferrybig

0

Für mich hatte ich max-heightstatt angegeben max-width.

Wenn du das bist, ändere es!

    @media screen and (max-width: 350px) {    // Not max-height
        .letter{
            font-size:20px;
        }
    }

0

Dies kann auch passieren, wenn die Zoomstufe des Browsers nicht korrekt ist. Der Zoom Ihres Browserfensters sollte 100% betragen. Verwenden Sie Ctrl + 0in Chrome , um die Zoomstufe zurückzusetzen.


1
Dies hätte nicht abgelehnt werden dürfen. Dies war die Antwort auf mein frustrierendes Problem!
Amir Almusawi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.