Sto codificando un sito con AngularJS e SCSS. Sono nella fase mobile dello sviluppo e ho scoperto rapidamente (per questo progetto) che avevo bisogno di un modo per individuare più punti di interruzione utilizzando una query @media
. Così ho trovato tramite this SO answer e this CSS Tricks Post e più altre risposte su SO. Poi ho implementato le soluzioni che ho trovato in un caso di test, vedere lo snippet qui sotto per il test.Elenco separato da virgole di query multimediali non funzionanti
main {
background-color: grey;
height: 100%;
min-height: 1000px;
@media (max-width: 992px) {
background-color: red
}
@media (max-width: 768px) {
background-color: lightcoral
}
@media (max-width: 992px), (max-width: 992px) and (orientation: landscape) {
background-color: lightgreen;
}
@media (max-width: 768px),
(max-width: 768px) and (orientation: landscape) {
background-color: lightblue;
// Reset the min-height here, because we no longer have the sticky search bar.
min-height: 450px;
}
}
<main>
<h1>Page Title</h1>
<h2>Some Descriptive information</h2>
<div>Content</div>
</main>
Ma io non sono stato in grado di farlo funzionare. Quello che sto cercando di fare, in definitiva, sono gli stili che vengono applicati quando l'utente è in orizzontale su un tablet o telefono. Tuttavia, non so se lo sto facendo bene o usando l'operatore or
correttamente.
Semplicemente non funziona, beh, la prima istruzione (ad esempio: (max-width: 992px)
) funziona, ma la seconda non è vera. Secondo Mozilla:
Gli elenchi separati da virgola si comportano come l'operatore logico o quando vengono utilizzati nelle query multimediali. Quando si utilizza un elenco separato da virgole di query multimediali, se una qualsiasi delle query multimediali restituisce true, gli stili o i fogli di stile vengono applicati. Ogni query multimediale in un elenco separato da virgole viene trattata come una singola query e qualsiasi operatore applicato a una query multimediale non influisce sugli altri. --- Mozilla Documentation
Anche se rompo il codice in due media query separate:
@media (max-width: 992px) {
background-color: lightgreen;
}
@media (max-width: 992px) and (orientation: landscape) {
background-color: lightgreen;
}
E ancora non funziona. Quindi non so se sto prendendo di mira la larghezza sbagliata (quando in landscape) o cosa sto facendo male. Qualche altro front-end sviluppatore può dirmi perché le mie virgolette separate da virgole non funzionano?
EDIT: Ecco il codice nativo SCSS:
main {
background-color: $mono-90;
height: 100%;
min-height: 1000px;
@media screen and (max-width: map_get($grid-breakpoints, 'md')) {
// Reset the min-height here, because we no longer have the sticky search bar.
min-height: 450px;
}
@media
(max-width: map_get($grid-breakpoints, 'lg')),
(max-width: map_get($grid-breakpoints, 'lg')) and (orientation: landscape){
background-color: lightgreen;
}
@media
(max-width: map_get($grid-breakpoints, 'md')),
(max-width: map_get($grid-breakpoints, 'md')) and (orientation: landscape){
background-color: lightblue;
}
@media
(max-width: map_get($grid-breakpoints, 'sm')),
(max-width: map_get($grid-breakpoints, 'sm')) and (orientation: landscape){
background-color: lightcoral;
}
}
EDIT: Per la raccomandazione di @Godwin, ho semplificato le mie @media
domande a questo:
main {
background-color: $mono-90;
height: 100%;
min-height: 1000px;
@media screen and (max-width: map_get($grid-breakpoints, 'md')) {
// Reset the min-height here, because we no longer have the sticky search bar.
min-height: 450px;
}
@media screen and (max-width: map_get($grid-breakpoints, 'lg')) {
background-color: lightgreen;
}
@media screen and (max-width: map_get($grid-breakpoints, 'md')) {
background-color: lightblue;
}
@media screen and (max-width: map_get($grid-breakpoints, 'sm')) {
background-color: lightcoral;
}
}
Tuttavia, non funziona su iPad Landscape (1024x768). I non lo lo voglio mostrare su computer portatili, ma do lo voglio mostrare su iPad in posizione orizzontale.
Logicamente questo non davvero senso. In pratica stai dicendo "Se A è vero OPPURE se A e B sono veri, allora fai qualcosa". La query sarà vera se l'orientamento è orizzontale o verticale, quindi perché è anche una condizione? – Godwin
Il pensiero è che voglio scegliere come target elementi specifici a seconda dell'orientamento del dispositivo. Quando ometto l'orientamento che sto dicendo "questi stili possono essere applicati al ritratto o al paesaggio, non importa". Ma, come detto, ci sono cose _certain_ che voglio mostrare solo su Landscape, ma che saranno già nascoste su Portrait. – mrClean
Quello che sto dicendo è che, per quanto ho capito, la tua affermazione equivale alla stessa cosa di "A || (A && B) 'che può essere semplificato in' A', mi sembra che ci sia un errore nella tua logica. Così com'è, un 'sfondo-colore' 'verde chiaro 'sarà applicato ogni volta che la larghezza è maggiore del grande punto di rottura, indipendentemente dal paesaggio. – Godwin