Korzystam z Bootstrap 3, aby zbudować responsywny układ, w którym chcę dopasować kilka rozmiarów czcionek do rozmiaru ekranu. Jak mogę użyć zapytań o media, aby stworzyć taką logikę?
371
Korzystam z Bootstrap 3, aby zbudować responsywny układ, w którym chcę dopasować kilka rozmiarów czcionek do rozmiaru ekranu. Jak mogę użyć zapytań o media, aby stworzyć taką logikę?
Odpowiedzi:
Bootstrap 3
Oto selektory używane w BS3, jeśli chcesz zachować spójność:
Uwaga: FYI, może to być przydatne do debugowania:
Bootstrap 4
Oto selektory używane w BS4. W BS4 nie ma „najniższego” ustawienia, ponieważ „bardzo mały” jest domyślny. Oznacza to, że najpierw zakodujesz rozmiar XS, a następnie zastąpisz te media.
Aktualizacja 2019-02-11: Informacje BS3 są nadal dokładne od wersji 3.4.0, zaktualizowane BS4 dla nowej siatki, dokładne od 4.3.0.
źródło
<span class="visible-xs">SIZE XS</span><span class="visible-sm">SIZE SM</span><span class="visible-md">SIZE MD</span><span class="visible-lg">SIZE LG</span>
Na podstawie odpowiedzi bisio i kodu Bootstrap 3 udało mi się znaleźć dokładniejszą odpowiedź dla każdego, kto chce tylko skopiować i wkleić kompletny zestaw zapytań o media w swoim arkuszu stylów:
źródło
min-width
, ale używałeśmax-width
również, więc jaka jest różnica? Czy jest to konieczne?Jeśli używasz LESS lub SCSS / SASS i używasz wersji Bootstrap w wersji LESS / SCSS, możesz również używać zmiennych , pod warunkiem, że masz do nich dostęp. MNIEJ tłumaczenie odpowiedzi @ full-decent brzmiałoby następująco:
Istnieją również zmienne dla
@screen-sm-max
i@screen-md-max
, które są o 1 piksel mniejsze niż@screen-md-min
i@screen-lg-min
, zwykle, do użycia z@media(max-width)
.EDYCJA: Jeśli używasz SCSS / SASS, zmienne zaczynają się
$
od zamiast zamiast@
, więc byłoby$screen-xs-max
itd.źródło
$screen-xs-max
itp. (A jeśli używasz LESS / SCSS lokalnie, ale importujesz wersję CSS z Bootstrap, zupełnie nie masz szczęścia.)@screen-tablet
,@screen-desktop
i@screen-lg-desktop
zostały wycofane. Być może nadszedł czas, aby zaktualizować i tak niesamowitą odpowiedź. ;-)Oto wartości z Bootstrap3:
źródło
and
warunki. @JasonMiller, więc nie jest to „konieczność”, zależy to od specyfikacji i wymagań dotyczących szablonu.Oto dwa przykłady.
Gdy rzutnia osiągnie szerokość 700 pikseli lub mniej, ustaw wszystkie tagi h1 na 20 pikseli.
Zrób wszystkie h1 na 20px, dopóki rzutnia nie osiągnie 700px lub więcej.
Mam nadzieję, że to pomaga: 0)
źródło
font-size: 20px
doh1
znaczników w obu przypadkach. Aby lepiej zrozumieć, możesz użyć innego,font-size
jak zadano w pytaniu. BTW Nadal jest w porządku.Oto bardziej modułowy przykład użycia LESS do naśladowania Bootstrap bez importowania mniejszej liczby plików.
źródło
Na podstawie odpowiedzi innych użytkowników napisałem te niestandardowe miksy, aby ułatwić ich użycie:
Mniej nakładów
Przykładowe użycie
Wejście SCSS
Przykładowe użycie:
Wynik
źródło
Począwszy od wersji Bootstrap 3.3.6 stosowane są następujące zapytania dotyczące multimediów, które odpowiadają dokumentacji opisującej dostępne klasy responsywne ( http://getbootstrap.com/css/#responsive-utilities ).
Zapytania o media wyodrębnione z repozytorium Bootstrap GitHub z następujących mniej plików: -
https://github.com/twbs/bootstrap/blob/v3.3.6/less/responsive-utilities.less https://github.com/twbs/bootstrap/blob/v3.3.6/less/variables.less
źródło
Lub prosty Sass-Compass:
Przykład:
źródło
pamiętaj, że głównym powodem istnienia układów responsywnych jest unikanie skalowania tekstu. cała logika responsywnych stron polega na tworzeniu funkcjonalnych układów, które skutecznie wyświetlają zawartość, dzięki czemu jest czytelna i można ją stosować na wielu rozmiarach ekranu.
Mimo że w niektórych przypadkach konieczne jest skalowanie tekstu, należy uważać, aby nie zminiaturyzować witryny i nie przegapić tego.
oto i tak przykład.
Pamiętaj również, że rzutnia 480 została upuszczona w bootstrap 3.
źródło
Używamy następujących zapytań o media w naszych plikach Less, aby utworzyć kluczowe punkty przerwania w naszym systemie grid.
patrz także na Bootstrap
źródło
źródło
Oto jeszcze łatwiejsze rozwiązanie typu One Stop, w tym osobne pliki responsywne oparte na zapytaniach o media.
Dzięki temu cała logika zapytań o media i logika uwzględnienia muszą istnieć tylko na jednej stronie - module ładującym. Pozwala to również uniknąć sytuacji, w której zapytania o media zaśmiecają same responsywne arkusze stylów.
base.less wyglądałby tak
sm-min.less wyglądałby tak
Twój indeks musiałby tylko załadować loader.less
bułka z masłem..
źródło
Bootstrap używa przede wszystkim następujących zakresów zapytań o media - lub punktów przerwania - w naszych źródłowych plikach Sass dla naszego układu, systemu siatki i komponentów.
Bardzo małe urządzenia (telefony portretowe, mniej niż 576 pikseli) Brak zapytania o media,
xs
ponieważ jest to ustawienie domyślne w BootstrapMałe urządzenia (telefony w orientacji poziomej, 576 pikseli i więcej)
Średnie urządzenia (tablety, 768 pikseli i więcej)
Duże urządzenia (komputery stacjonarne, 992px i nowsze)
Bardzo duże urządzenia (duże komputery stacjonarne, 1200 pikseli i więcej)
Ponieważ piszemy nasz źródłowy CSS w Sass, wszystkie nasze zapytania o media są dostępne poprzez mixiny Sass:
Żadne zapytanie o media nie jest konieczne dla punktu przerwania xs, ponieważ jest on efektywny
@media (min-width: 0) { ... }
Aby to zrozumieć, proszę przejść przez poniższy link
https://getbootstrap.com/docs/4.3/layout/overview/
źródło
źródło
Użyj zapytań o media dla IE;
źródło
:)
W najnowszym bootstrapie (4.3.1) za pomocą SCSS (SASS) możesz użyć jednego z @mixin z
/bootstrap/scss/mixins/_breakpoints.scss
Media o minimalnej szerokości punktu przerwania. Brak zapytania o najmniejszy punkt przerwania. Sprawia, że @content ma zastosowanie do danego punktu przerwania i jest szerszy.
@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints)
Media o maksymalnej szerokości punktu przerwania. Brak zapytania o największy punkt przerwania. Sprawia, że @content ma zastosowanie do danego punktu przerwania i jest węższy.
@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints)
Nośnik obejmujący wiele szerokości punktów przerwania. Sprawia, że @content ma zastosowanie między minimalnymi i maksymalnymi punktami przerwania
@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints)
Media między minimalną a maksymalną szerokością punktu przerwania. Brak minimum dla najmniejszego punktu przerwania i brak maksimum dla największego. Sprawia, że @content ma zastosowanie tylko do danego punktu przerwania, a nie do rzutni szerszych ani węższych.
@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints)
Na przykład:
Dokumentacja:
Szczęśliwego kodowania;)
źródło
Aby poprawić główną odpowiedź:
Możesz użyć atrybutu media
<link>
tagu (obsługuje zapytania o media), aby pobrać tylko kod, którego potrzebuje użytkownik.Dzięki temu przeglądarka pobierze wszystkie zasoby CSS, niezależnie od atrybutu media . Różnica polega na tym, że jeśli zapytanie medialne atrybutu media zostanie ocenione na false, to plik .css i jego zawartość nie będą blokowały renderowania.
Dlatego zaleca się użycie atrybutu media w pliku
<link>
tagu, ponieważ gwarantuje to lepszą obsługę.Tutaj możesz przeczytać artykuł Google na ten temat https://developers.google.com/web/fundamentals/performance/critical-rendering-path/render-blocking-css
Niektóre narzędzia, które pomogą zautomatyzować separację kodu css w różnych plikach zgodnie z zapytaniami o media
Webpack https://www.npmjs.com/package/media-query-plugin https://www.npmjs.com/package/media-query-splitting-plugin
PostCSS https://www.npmjs.com/package/postcss-extract-media-query
źródło