blank template
De meesten van ons kennen wel bootstrap. Ik vroeg me af of er tegenwoordig eigenlijk nog meer/andere/nieuwere (???)handige tools zijn (gratis of betaald) om makkelijk een responsive template te maken.
Ik denk dan aan een situatie waarbij je gewoon begint met een volledig wit scherm, maar waar je op de een of andere manier makkelijk componenten aan kunt toevoegen die dan ook gelijk al responsive zijn.
Ja, het klinkt een beetje vaag wellicht wat ik zeg, maar hopelijk begrijpt iemand wat ik bedoel.
Je begint dus met een leeg canvas, maar in plaats van dat je ieder element zelf aan de html-code moet toevoegen en via css moet positioneren, hoef je bijv. alleen dit in te voeren:
en dan komt er op het scherm een header te staan van 200px hoog. En als je daar dan bijv. 2 kolommen in wil plaatsen doe je:
Code (php)
1
2
3
4
2
3
4
<div class="header-200px">
<div class="col-80%"></div>
<div class="col-20%"></div>
</div>
<div class="col-80%"></div>
<div class="col-20%"></div>
</div>
en wil je er een menu in dan doe je:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<div class="header-200px">
<div class="col-80%"></div>
<div class="col-20%">
<div class="menu-horizontal">
<li>Home</li>
<li>Contact</li>
</div>
</div>
</div>
<div class="col-80%"></div>
<div class="col-20%">
<div class="menu-horizontal">
<li>Home</li>
<li>Contact</li>
</div>
</div>
</div>
Bestaat zoiets? Of kom je dan toch automatisch op Bootstrap uit?
https://colorlib.com/wp/html5-css3-grid-frameworks/
Ik vermoed wel dat ze bijna allemaal wel een stuk lichter zijn.
Gewijzigd op 24/09/2019 08:52:21 door - Ariën -
Thanks voor je reactie Aar. Heb je zelf ervaring met (een van) deze systemen toevallig? En zijn er ook systemen waarmee je bijv. makkelijk een drop down menu maakt?
Ikzelf gebruik overigens de Bootstrap.
https://tailwindcss.com/. Een zogeheten utility-first framework dat mobile-first geschreven wordt. Dit maakt het gelijk "responsive". Het zal ongetwijfeld wennen zijn, je ziet immers heel veel classes, maar door gebruik te maken van componenten (bijv. met Vue of React) zorg je dat elk element maar één keer bestaat.
Er zijn een hoop projecten waarin ik geen enkele regel CSS heb hoeven schrijven.
Ik gebruik zelf Er zijn een hoop projecten waarin ik geen enkele regel CSS heb hoeven schrijven.
- Ariën - op 24/09/2019 10:39:27:
Wat heeft een dropdown met responsive-ness te maken?
Meer in de zin van ... een goed layout systeem waarin zaken als (bijv.) menu's en de mogelijkheid voor modals/pop-up boxen al zijn opgenomen. En dan bedoel ik niet zozeer qua layout. Het liefst zijn het allemaal grijstinten en pas je alles zelf naar wens aan. Maar dat het vooral werkt qua responsiveness/positionering, zodat je dat niet zelf allemaal nog hoeft te doen.
Het gaat me er vooral om om tijd te besparen. Ik kan zelf een responsive css layout schrijven, maar als die er gewoon al zijn, volledig uitgekristalliseerd zodat ze in alle browsers goed werken, dan lijkt me dat wel handig.
Toevoeging op 24/09/2019 12:02:58:
Richard Hansma op 24/09/2019 11:25:46:
Ik gebruik zelf https://tailwindcss.com/. Een zogeheten utility-first framework dat mobile-first geschreven wordt. Dit maakt het gelijk "responsive". Het zal ongetwijfeld wennen zijn, je ziet immers heel veel classes, maar door gebruik te maken van componenten (bijv. met Vue of React) zorg je dat elk element maar één keer bestaat.
Er zijn een hoop projecten waarin ik geen enkele regel CSS heb hoeven schrijven.
Er zijn een hoop projecten waarin ik geen enkele regel CSS heb hoeven schrijven.
Interessant. Wat betekent bijv. deze regel?
<div class="mt-4 md:mt-0 md:ml-6">
Heeft dit systeem een hoge leercurve?
Het gebruikt wel erg veel classes ...
<input class="bg-white focus:outline-none focus:shadow-outline border border-gray-300 rounded-lg py-2 px-4 block w-full appearance-none leading-normal" type="email" placeholder="[email protected]">
hier kunt zien:
Kun je voor vier schermbreedtes aparte opmaak instellen.
waarbij:
sm = small
md = medium
lg = large
xl = extra large
Verder:
m = margin
p = padding
t = top
r = right
b = bottem
l = left.
<div class="mt-4 md:mt-0 md:ml-6">
mt-4 = standaard instelling voor alle schermbreedtes = margin-top: 4 eenheden
md:mt-0 voor de medium schermbreedte = margin-top: 0.
md:ml-6 voor de medium schermbreedte = margin-left: 6 eenheden
Hoe groot een eenheid is is afhankelijk van de instellingen.
zoals je Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
/* Small (sm) */
@media (min-width: 640px) { /* ... */ }
/* Medium (md) */
@media (min-width: 768px) { /* ... */ }
/* Large (lg) */
@media (min-width: 1024px) { /* ... */ }
/* Extra Large (xl) */
@media (min-width: 1280px) { /* ... */ }
@media (min-width: 640px) { /* ... */ }
/* Medium (md) */
@media (min-width: 768px) { /* ... */ }
/* Large (lg) */
@media (min-width: 1024px) { /* ... */ }
/* Extra Large (xl) */
@media (min-width: 1280px) { /* ... */ }
Kun je voor vier schermbreedtes aparte opmaak instellen.
waarbij:
sm = small
md = medium
lg = large
xl = extra large
Verder:
m = margin
p = padding
t = top
r = right
b = bottem
l = left.
<div class="mt-4 md:mt-0 md:ml-6">
mt-4 = standaard instelling voor alle schermbreedtes = margin-top: 4 eenheden
md:mt-0 voor de medium schermbreedte = margin-top: 0.
md:ml-6 voor de medium schermbreedte = margin-left: 6 eenheden
Hoe groot een eenheid is is afhankelijk van de instellingen.
Gewijzigd op 24/09/2019 21:33:49 door Frank Nietbelangrijk
Dankjewel voor de heldere uitleg. Werk je zelf ook met dit framework?
Als ik het goed begrijp stelt ie die spacing dus in via javascript aan de hand van de class name? Ik ben wel benieuwd of dat allemaal niet heel traag werkt dan.
Ozzie PHP op 25/09/2019 00:29:24:
Als ik het goed begrijp stelt ie die spacing dus in via javascript aan de hand van de class name? Ik ben wel benieuwd of dat allemaal niet heel traag werkt dan.
Nee. Je houdt zelf bij via een config welke utility-waardes je wilt hebben. Vervolgens worden deze gegenereerd in een css bestand (via gulp/webpack/postcss). Het geeft je de vrijheid om alles uniek te definiëren, binnen je eigen opgegeven restricties.
Ozzie PHP op 24/09/2019 11:53:59:
Het gebruikt wel erg veel classes ...
<input class="bg-white focus:outline-none focus:shadow-outline border border-gray-300 rounded-lg py-2 px-4 block w-full appearance-none leading-normal" type="email" placeholder="[email protected]">
<input class="bg-white focus:outline-none focus:shadow-outline border border-gray-300 rounded-lg py-2 px-4 block w-full appearance-none leading-normal" type="email" placeholder="[email protected]">
Klopt. En voor input-velden en knoppen is dit wellicht overdreven. Er zijn hiervoor 2 alternatieven:
1. Een button component maken die je vervolgens kunt gebruiken als "<custom-button></button>"
2. Zelf een .btn class maken in css met de @apply methode. Dit zorgt voor minder mogelijkheden, omdat je meerdere utilities verzameld onder één naam. Maar via @apply kun je blijven gebruik maken van je config waardes. Zie ook https://tailwindcss.com/docs/extracting-components/#extracting-css-components-with-apply
Gewijzigd op 25/09/2019 14:37:08 door Richard Hansma
Ah oké, ik dacht ergens te zien dat je die waardes in een .js bestand moest instellen.
Ik vind deze manier overigens nog wel een beetje 'vaag' eigenlijk. Want als je het op deze manier doet, ben je in feite in de html-code je opmaak aan het regelen. Volgens mij gaat dat in tegen het principe van code en lay-out gescheiden houden. In plaats van al die vele classes zou je ook inline-styling kunnen gebruiken en normaliter is dat niet echt wenselijk. Je wil al je opmaak in je css-file hebben zitten, maar hiermee verplaats je de opmaak juist naar de html-code.
Klopt. Dat is die config, waaruit alles gegenereerd wordt. Maar dit wordt tijdens het builden van je front-end gedaan. Niet tijdens run-time.
>>> Ik vind deze manier overigens nog wel een beetje 'vaag' eigenlijk. Want als je het op deze manier doet, ben je in feite in de html-code je opmaak aan het regelen.
Ik begrijp wat je bedoelt, aangezien dit mijn eerste gevoel ook was. Maar uiteindelijk roep je nog steeds classes aan, enkel zijn ze nu beter te begrijpen en bovendien los te gebruiken. Voor mij het grootste punt is dat ".navbar" voor mij niet hoef te bepalen welke kleur hij moet krijgen.
Want wat nu als je zowel een light als dark-mode wil introduceren, moet je 2x een complete class maken met de namen "light-navbar" en "dark-navbar". En dat terwijl je alleen de kleur wijzigt.
En wat betreft het inline-stylen, je krijgt enkel de opties om te kiezen uit je config. Als je geen oranje kleur wil in je palet, haal je dat uit je config en kun je geen oranje kleur krijgen.
Kortom, je gebruikt nog steeds classes, dus je code en lay-out is nog steeds gescheiden. Je hoeft alleen de css niet zelf meer te schrijven. Zie onderstaand.
<div class="navbar"></div>
.navbar {
width: 100%;
background: black;
padding-top: .5rem;
padding-bottom: .5rem;
}
vs.
<div class="w-full bg-black py-2">
.w-full {
width: 100%;
}
.bg-black {
background: black;
}
.py-2 {
padding-top: .5rem;
padding-bottom: .5rem;
}
Gewijzigd op 25/09/2019 16:30:17 door Richard Hansma
Hm, oké .. maar waarom dan in een .js bestand :-s
Je toont nu eigenlijk precies mijn punt aan (althans dat idee heb ik).
Dit <div class="w-full bg-black py-2"> is in feite gewoon inline styling. Hetzelfde als:
<div style="width: 100%; background: black; padding-top: .5rem; padding-bottom: .5rem;">
Snap je wat ik bedoel te zeggen? Volgens mij ben je nu gewoon aan het inline stylen, alleen is de schrijfwijze wat korter.
Wellicht zit ik er helemaal naast hoor, maar dan hoor ik graag hoe het wel zit :-)
Dat is waarschijnlijk de prijs die je moet betalen als je dit soort dingen generiek wilt maken.
Die wordt gebruikt door tailwindcss om een css bestand te genereren met al jouw voorkeuren.
>>> Snap je wat ik bedoel te zeggen? Volgens mij ben je nu gewoon aan het inline stylen, alleen is de schrijfwijze wat korter.
Ik begrijp wel wat je bedoelt, maar zolang je geen style attribute gebruikt ben je niet aan het inline stylen.
Als dit niet is wat je zoekt, ook prima. Ik weet echter uit ervaring dat frameworks als Bootstrap enorm opiniated zijn. Even makkelijk "header-80%' toevoegen maakt het erg lastig. In tailwindcss is dit geen probleem.
Daarnaast gaan praktisch alle grote frameworks over op het utility first pattern. Zie ook https://www.w3schools.com/bootstrap4/bootstrap_utilities.asp
Uiteindelijk maakt het weinig uit wat anderen vinden, je moet er zelf mee kunnen/willen werken.
Ozzie PHP op 25/09/2019 00:29:24:
@Frank
Dankjewel voor de heldere uitleg. Werk je zelf ook met dit framework?
Als ik het goed begrijp stelt ie die spacing dus in via javascript aan de hand van de class name? Ik ben wel benieuwd of dat allemaal niet heel traag werkt dan.
Dankjewel voor de heldere uitleg. Werk je zelf ook met dit framework?
Als ik het goed begrijp stelt ie die spacing dus in via javascript aan de hand van de class name? Ik ben wel benieuwd of dat allemaal niet heel traag werkt dan.
Nee Ozzie maar ik herkende de afkortingen al van Bootstrap. En een snelle blik op de docs van dit css framework bevestigde dit.
Bootstrap is wel een behoorlijk pak. Dat zal het wel wat trager maken maar dit lijkt me wel een mooi lightweight pakket.
Er zijn overigens twee snelheden te meten :p
1) Hoe lichter het pakket hoe sneller de webpagina er staat. Maar ..
2) Hoe sneller de developer zijn werk kan doen hoe meer boterhammetjes er op zijn plank liggen. (een opdrachtgever heeft geen oneindig geduld en geld dus moet je meters maken).
Een webapp anno 2019 MOET in mijn ogen gewoon in 99% van de gevallen responsive zijn en daar zit best wel wat werk in. Een framework als deze (ik ben zelf erg weg van het grid systeem van Bootstrap) biedt gewoon de juiste tools hiervoor.
Gewijzigd op 25/09/2019 20:51:50 door Frank Nietbelangrijk
Mja blijkbaar ... en de vraag is dan of je dat moet willen.
>> Ik begrijp wel wat je bedoelt, maar zolang je geen style attribute gebruikt ben je niet aan het inline stylen.
Ja, maar het gaat om het principe. Stel we hebben een product. In het geval van tailwindcss zeg je dan: geef dit element een width van x, een hoogte van y, achtergrondkleur z en rond de hoeken af.
Volgens mij is CSS in het leven geroepen om juist te kunnen zeggen: dit element is een product, en vervolgens geef je er de class "product" aan mee. Je stylesheet bepaalt dan vervolgens hoe het product eruit komt te zien. Door vervolgens enkel de stylesheet te vervangen zou je een compleet nieuwe lay-out moeten kunnen maken. Dat kan niet met (een systeem als) tailwindcss.
Of stel ik toon op de homepage een product dat dezelfde opmaak moet hebben als op de productpagina. Normaliter zou je dan aan beide elementen de class "product" meegeven en het is klaar. Maar bij tailwind moet je dan eerst alle classes gaan kopiëren vanuit het ene bestand en plakken in het andere bestand.
Ik denk dat CSS en scheiding van html en lay-out eigenlijk niet zo bedoeld is. Die hele manier van stylen is eigenlijk wel raar als je erover nadenkt. Want eigenlijk stijl je gewoon in het document in plaats van in het css-bestand.
Op dit punt ben ik het niet met je eens. Je gebruikt classes. Je css staat gewoon in een css bestand. Je gebruikt misschien meer classes in de HTML maar hierdoor ook minder css (er van uit gaande dat je alles gebruikt in een css bestand). Wil je immers maar één class (of id) per element gebruiken dan krijg je weer voor veel elementen dezelfde css regels. Stel je huiskleur is #ABCDEF hoe vaak moet je dan de regel
wel niet gebruiken? Bovendien moet je dan telkens in je css bestand gaan spitten. Deze wordt al snel minder overzichtelijk ook.
Lees dit nog eens een keer:
Richard Hansma op 24/09/2019 11:25:46:
Er zijn een hoop projecten waarin ik geen enkele regel CSS heb hoeven schrijven.
Heerlijk man. Lekker met je HTML bezig, zonder heen en weer te hoeven van je css <--> html.
Gewijzigd op 25/09/2019 22:23:51 door Frank Nietbelangrijk
>>> Of stel ik toon op de homepage een product dat dezelfde opmaak moet hebben als op de productpagina. Normaliter zou je dan aan beide elementen de class "product" meegeven en het is klaar. Maar bij tailwind moet je dan eerst alle classes gaan kopiëren vanuit het ene bestand en plakken in het andere bestand.
Wat ik eerder al zei, dit is een ideaal voorbeeld voor het gebruik van componenten, een include die je kunt hergebruiken en maar één keer hoeft te definiëren. Zie voorbeeld.
custom-button.html
<template>
<button class="heel veel classes die van alles doen">Klik op mij</button>
</template>
homepage.html
<div>blablabla</div>
<custom-button></custom-button>
<div>blablabla</div>
otherpage.html
<div>blablabla</div>
<custom-button></custom-button>
<div>blablabla</div>
Gewijzigd op 26/09/2019 00:11:38 door Richard Hansma
Dat snap ik ... wat ik bedoel is dat die classes (ik weet niet of dat voor alle classes geldt, ik chargeer een beetje) een eigenschap met waarde uitdrukken. Een voorbeeld: bg-red is hetzelfde als background-color: red. Volgens mij ben je dan dus gewoon aan het inline stylen. Het wordt anders wanneer je kunt zeggen: bg-primary. Dan beschrijft de class niet zozeer een eigenschap, maar meer een functionaliteit/doel.
Stel ik heb een mooie product layout gemaakt waarbij een product bestaat uit een aantal geneste div'jes en spans. Alles is mooi opgemaakt op de productpagina en in de buitenste div van ieder product staat de class="product". Aan de hand van die ene class kan ik het complete product stylen. Wil ik nu op een andere pagina ook een product tonen, dan hoef ik alleen die class="product" toe te voegen en de lay-out klopt.
Met tailwindcss zou ik dan weer ieder divje en span al die classes moeten meegeven.
>> Wat ik eerder al zei, dit is een ideaal voorbeeld voor het gebruik van componenten, een include die je kunt hergebruiken en maar één keer hoeft te definiëren. Zie voorbeeld.
Ah oké ... kun je zo'n template ook voor een dynamisch product (waarvan het id telkens verschilt) maken?
PS Dit is overigens geen kritiek of aanval op tailwindcss ... ik probeer juist door met jullie te discussiëren uit te vinden of het interessant is om dit (of een vergelijkbaar) systeem voor mezelf toe te gaan passen.
Gewijzigd op 26/09/2019 00:36:24 door Ozzie PHP
Ozzie PHP op 25/09/2019 21:01:42:
...
Of stel ik toon op de homepage een product dat dezelfde opmaak moet hebben als op de productpagina. Normaliter zou je dan aan beide elementen de class "product" meegeven en het is klaar. Maar bij tailwind moet je dan eerst alle classes gaan kopiëren vanuit het ene bestand en plakken in het andere bestand.
...
Of stel ik toon op de homepage een product dat dezelfde opmaak moet hebben als op de productpagina. Normaliter zou je dan aan beide elementen de class "product" meegeven en het is klaar. Maar bij tailwind moet je dan eerst alle classes gaan kopiëren vanuit het ene bestand en plakken in het andere bestand.
...
Je zou gebruik kunnen maken van PostCSS of SCSS, hiermee kan je code zoals dit schrijven:
Tailwind zorgt er verder wel voor dat de gebruikte CSS properties in meerdere browsers zal werken lijkt me.
Bron: https://tailwindcss.com/docs/extracting-components
Gewijzigd op 26/09/2019 10:51:48 door Marthijn Buijs