Asettelun toteutus on kehittynyt merkittävästi, siirtyen pois työläistä prosesseista.
min()
, max()
,
minmax()
ja clamp()
responsiivista suunnittelua varten.
px
) absoluuttinen paikannuspx
, cm
, in
)<head>
-elementin sisäänwidth=device-width
: asettaa näkymäportin leveyden laitteen leveydeksi.initial-scale=1.0
: asettaa alkuperäisen zoomaustason.maximum-scale=1.0
, minimum-scale=1.0
, user-scalable=no
(harvinaisempi): hallitsee zoomausta ja skaalausta.<meta name="viewport" content="width=device-width, initial-scale=1.0">
vw
: 1% näkymäportin leveydestä.vh
: 1% näkymäportin korkeudesta.vmin
tai vi
: 1% näkymäportin pienemmästä ulottuvuudesta (leveys tai korkeus).vmax
tai vb
: 1% näkymäportin suuremmasta ulottuvuudesta..element { width: 50vw; height: 30vh; }
Miksi? Luo responsiivisia asetteluja, jotka mukautuvat saumattomasti eri näytön kokoihin ja suuntiin.
em |
Suhteessa yläelementin fonttikokoon |
rem |
Suhteessa juurielementin (html ) fonttikokoon |
% |
Suhteessa yläkontin kokoon |
vw , vh |
Näkymäportin leveys / korkeus prosentteina (1vw = 1% näytön leveydestä) |
fr |
Osa käytettävissä olevasta tilasta ruudukkoasettelussa |
min(val1, val2) |
Pienempi arvoista |
max(val1, val2) |
Suurempi arvoista, esim. osat |
minmax(min, max) |
Sopiva arvo minin ja maxin välillä |
clamp(min, val, max) |
Keskimmäinen arvo on voimassa, kunnes rajat saavutetaan |
Näitä funktioita voidaan käyttää leveyden lisäksi myös fonttikokoihin, ruudukkoasetteluihin ja muihin.
body {
font-size: clamp(1rem, 2.5vw, 2rem);
}
Tämä varmistaa, että teksti on vähintään 1rem
, skaalautuu näkymäportin leveyden mukaan (2.5vw), mutta ei ylitä 2rem
.
Flex tekee tempun kääriytymällä, kasvamalla ja kutistumalla tarpeen mukaan
.cluster{
display: flex;
flex-wrap: wrap;
gap: 1rem;
transition: width 3s;
width: 100%;
}
.cluster:hover {
width: 10%;
}
.cluster-item{
background-color: rgba(0,0,255,0.3);
border: 1px solid blue;
flex-grow: 1; #tasainen jako
#tila varataan suhteellisesti
}
Vie hiiri tutkiaksesi, viimeinen sarake näyttää vastaavat asetukset:
grid-template-columns: 1fr 1fr 1fr 1fr 3fr;
grid-template-columns: 250px 100px 100px 3fr 1fr;
grid-template-columns: 1fr 1f 1fr 250px;
repeat(3, 1fr)
Ensimmäinen parametri on kertoja, tässä kontekstissa sarakkeiden lukumäärä
Toinen parametri kertoo kunkin sarakkeen koon
grid-template-columns: repeat(3, 1fr) 250px;
grid-template-columns: repeat(3, minmax(100px, 1fr)) 250px;
Viimeinen osa (250px) lisää "joustavuuspuskuria". Se ottaa sen, mitä jää jäljelle 3 * minmax() -funktiosta, jos tila < laskettu leveys.
grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)) 250px;
Huomautus:
auto-fill
luo mahdollisimman monta raitaa, vaikka ne olisivat tyhjiäauto-fit
kutistaa tyhjät raidatauto-fill
vs. auto-fit
minmax(100px, 1fr)
-funktiota, käyttäytyminen vaihtelee riippuen valinnasta
auto-fill
tai auto-fit
:
>repeat (auto-fill, minmax(empty, full))
Niilo ei yksinkertaisesti pysty pyristelemään irti nörttikaavasta
@media
kuuluu
at-rules -ryhmään
(muita esimerkkejä: @import
, @property
, @supports
).
@media
-säännön sisällä määrität media queryn, joka määrittää, milloin sisällytetyt tyylit
tulee ottaa käyttöön.
()
.
min-width: 900px
- Näytön vähimmäisleveysresolution: 720dpi
- Laitteen resoluutioorientation: landscape
- Näytön suuntascreen
- Pöytäkoneet, kannettavat tietokoneet, tabletit ja puhelimetprint
- Tulostettavien asiakirjojen tyylitspeech
- Näytönlukijoiden tyylitall
- Koskee kaikkia mediatyyppejäprefers-reduced-motion
- Vähentää animaatioita ja siirtymiäprefers-color-scheme
- Mahdollistaa tumman tai vaalean tilan (dark | light
)prefers-contrast
- Lisää tai vähentää kontrastiaprefers-reduced-transparency
- Vähentää läpinäkyvyyttä paremman luettavuuden vuoksiand
, or
, not
, only
) monimutkaisten ehtojen luomiseen:
@media screen and (min-width: 600px), (orientation: landscape) {
body {
background-color: lightblue;
}
}
width | min-width | max-width | height | min-height | max-height| aspect-ratio | color | resolution | orientation | scan ...
@media (min-width: 768px) { css-rule }
@media (min-width: 768px) and (max-width: 991px) { css-rule }
all | aural | braille | handheld | print | projection | screen | tty | tv | embossed | speech ...
@media (print) { css-rule }
@media (min-width: 700px), handheld and (orientation: landscape){ css-rule }
Lisätietoja tältä sivustolta W3Schools materiaali
p {
color: blue;
}
/* Muista, ei päällekkäisiä leveyksiä!*/
@media (min-width: 1200px) {
//säännöt vain leveille näytöille
}
@media (min-width: 992px) and (max-width: 1199px) {
//säännöt kannettavan tietokoneen kokoisille näytöille
}
Pieni puhelin | < 600px |
Puhelin | 600px - 767px |
Tabletti | 768px - 991px |
Pöytäkone | 992px - 1199px |
Leveä pöytäkone | >= 1200px |
Nämä viisi katkaisupistettä on esitetty W3Schools:n toimesta hyvin hyväksyttynä de facto -standardina ja ne ovat hyvin lähellä Bootstrapin kaltaisten kehysten käyttämiä katkaisupisteitä.
Bootstrap | Tailwind CSS | Bulma | Materialize | |
---|---|---|---|---|
Suunnittelutapa | Komponenttipohjainen | Hyötyluokka edellä | Flexbox-ruudukko | Material Design |
Mukauttaminen | Keskitaso | Korkea | Keskitaso | Matala |
JS-ominaisuudet | Kyllä | Ei | Ei | Kyllä |
Käyttötapaus | Yleiskäyttö, nopea prototyyppaus | Mukautettu käyttöliittymä, suuret projektit | Kevyet sivustot | Google Material UI |
Arvioitu suosio | Erittäin korkea | Erittäin korkea | Keskitaso-korkea | Matala-keskitaso |
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Bootstrap demo</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous">
</head>
<body>
<h1>Hello, world!</h1>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
</body>
</html>
Katkaisupiste | Vähimmäisleveys |
---|---|
xs (erittäin pieni) | Ei mitään (Oletus) |
sm (pieni) | 576px |
md (keskikokoinen) | 768px |
lg (suuri) | 992px |
xl (erittäin suuri) | 1200px |
xxl (erittäin erittäin suuri) | 1400px |
col-md-*
-säännöt tulevat voimaan, kun näkymä saavuttaa 768px<div class="row">
<div class="col-md-6 col-lg-4 bg-primary text-white">Responsiivinen sarake</div>
</div>
Bootstrap 5 ruudukkojärjestelmä (col-*
, nykyinen versio)
col-md-*
- kelvolliset arvot vaihtelevat välillä 1..12.Hallitse näkyvyyttä ja asettelua Bootstrapin d-*
-luokilla!
Luokka | Vaikutus |
---|---|
d-none |
Piilottaa elementin (display: none; ) |
d-block |
Tekee elementistä lohkon (display: block; ) |
d-inline |
Tekee elementistä rivinsisäisen (display: inline; ) |
Näytä/piilota elementtejä näytön koon perusteella.
Luokka | XS (oletus) | SM (≥576px) | MD (≥768px) | LG (≥992px) |
---|---|---|---|---|
d-sm-none |
✅ Näkyvissä | ❌ Piilotettu | ❌ Piilotettu | ❌ Piilotettu |
d-md-block |
❌ Piilotettu | ❌ Piilotettu | ✅ Lohko | ✅ Lohko |
<p class="d-none d-md-block">Näkyvissä MD+ -näytöillä!</p>
Käytä d-flex
:iä flexboxin mahdollistamiseen
Luokka | Vaikutus |
---|---|
d-flex |
Mahdollistaa Flexboxin (display: flex; ) |
d-inline-flex |
Mahdollistaa rivinsisäisen flexboxin (display: inline-flex; ) |
<div class="d-flex justify-content-center">
<button class="btn btn-primary">Keskitetty painike</button>
</div>
resize
tai zoom in/out
nähdäksesi vaikutuksen<div class="container">
<div class="row justify-content-md-center">
<div class="col-12 col-md-3 col-lg-2">
Ensimmäinen
</div>
<div class="d-none col-md-auto d-md-block">
Vaihtelevan levyinen sisältö
</div>
<div class="col-12 col-md-3 col-lg-2">
Viimeinen
</div>
</div>
<div class="row">
<div class="col">
Ensimmäinen
</div>
<div class="d-none col-md-auto d-md-block">
Vaihtelevan levyinen sisältö
</div>
<div class="col-12 col-sm-4 col-md-3 col-lg-2">
Viimeinen
</div>
</div>
</div>
<button aria-label="Sulje dialogi">×</button>
<p id="username-desc">Syötä käyttäjänimesi.</p>
<input type="text" id="username" aria-describedby="username-desc" class="form-control">
Syötä käyttäjänimesi.
<button data-bs-toggle="collapse" aria-expanded="false" class="btn btn-primary">Näytä tiedot</button>
<button aria-haspopup="true" class="btn btn-info">Avaa valikko</button>
<div aria-hidden="true" class="alert alert-warning">Koristeellinen kuva</div>
tabindex=0
tekee elementistä fokusoitavan.
Älä
käytä tabindex-arvoja, jotka ovat suurempia kuin nolla