Tôi đang mã hóa trang web bằng AngularJS và SCSS. Tôi đang trong giai đoạn phát triển di động và tôi nhanh chóng phát hiện ra (đối với dự án này) mà tôi cần một cách để nhắm mục tiêu nhiều điểm ngắt bằng cách sử dụng truy vấn @media
. Vì vậy, tôi tìm thấy thông qua this SO answer và this CSS Tricks Post cũng như nhiều câu trả lời khác trên SO. Sau đó, tôi đã triển khai các giải pháp mà tôi đã tìm thấy trong một trường hợp thử nghiệm, xem đoạn mã bên dưới để kiểm tra.Danh sách truy vấn phương tiện được phân cách bằng dấu phẩy không hoạt động
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>
Nhưng tôi đã không thể có được nó để làm việc. Những gì tôi đang cố gắng làm, cuối cùng, là có các kiểu được áp dụng khi người dùng ở chế độ ngang trên máy tính bảng hoặc điện thoại. Tuy nhiên, tôi không biết nếu tôi làm đúng hay sử dụng toán tử or
chính xác.
Đồng bằng không hoạt động, tốt, câu lệnh đầu tiên (ví dụ: (max-width: 992px)
) hoạt động nhưng câu lệnh thứ hai không đánh giá đúng. Theo Mozilla:
Danh sách được phân tách bằng dấu phẩy hoạt động giống như toán tử logic hoặc khi được sử dụng trong truy vấn phương tiện. Khi sử dụng danh sách truy vấn phương tiện được phân cách bằng dấu phẩy, nếu bất kỳ truy vấn phương tiện nào trả về true, các kiểu hoặc kiểu trang sẽ được áp dụng. Mỗi truy vấn phương tiện trong danh sách được phân cách bằng dấu phẩy được coi là truy vấn riêng lẻ và bất kỳ toán tử nào được áp dụng cho một truy vấn phương tiện đều không ảnh hưởng đến các truy vấn khác. --- Mozilla Documentation
Thậm chí nếu tôi phá vỡ các mã vào hai truy vấn phương tiện truyền thông riêng biệt:
@media (max-width: 992px) {
background-color: lightgreen;
}
@media (max-width: 992px) and (orientation: landscape) {
background-color: lightgreen;
}
Nó vẫn không hoạt động. Vì vậy, tôi không biết nếu tôi đang nhắm mục tiêu sai chiều rộng (khi ở trong cảnh quan) hoặc những gì tôi đang làm sai. Bất kỳ nhà phát triển Front-End nào khác có thể cho tôi biết tại sao các truy vấn phương tiện được phân tách bằng dấu phẩy của tôi không hoạt động?
EDIT: Đây là mã SCSS mẹ đẻ:
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: mỗi sự giới thiệu của @Godwin, tôi đơn giản hóa @media
truy vấn của tôi như thế này:
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;
}
}
Tuy nhiên, nó không hoạt động trên iPad Landscape (1024x768). Tôi không muốn hiển thị trên Máy tính xách tay, nhưng làm muốn nó hiển thị trên iPad ở vị trí Cảnh quan.
Logic này không thực sự có ý nghĩa. Về cơ bản, bạn nói "Nếu A là đúng HOẶC nếu A và B là đúng thì hãy làm gì đó". Truy vấn sẽ đúng nếu định hướng là ngang hoặc dọc, vậy tại sao nó lại là một điều kiện? – Godwin
Ý nghĩ là tôi muốn nhắm mục tiêu các phần tử cụ thể tùy thuộc vào hướng của thiết bị. Khi tôi bỏ qua hướng tôi đang nói "những kiểu này có thể được áp dụng cho cả hai chân dung hoặc phong cảnh, không quan trọng." Nhưng, như đã đề cập, có những thứ _certain_ mà tôi chỉ muốn hiển thị trên Landscape, nhưng đã được ẩn trên Portrait. – mrClean
Điều tôi đang nói là, theo như tôi hiểu, tuyên bố của bạn tương đương với điều tương tự như 'A || (A && B) 'có thể được đơn giản hóa thành' A', có vẻ như tôi có lỗi trong logic của bạn. Vì nó là viết tắt, một màu nền 'lightgreen'' sẽ được áp dụng bất cứ khi nào chiều rộng lớn hơn điểm ngắt lớn, bất kể cảnh quan. – Godwin