Webbplatsen kan inte läsas in korrekt

Se till att du använder en rekommenderad webbläsare. Är så redan fallet, försök besöka oss igen om en stund.

Rekommenderade webbläsare

Styleguide för pensionsmyndigheten.se

Developers

Frontend Guidelines

Main

Vi utvecklar utifrån våra riktlinjer och beslut. SAD Externwebben Frontend dokumentet innehåller flera kapitel av de övergripande riktlinjer som vi utvecklar efter.

Frontend i följande sub-områden

  • HTML
  • CSS
  • JavaScript
  • Tillgänglighet

HTML

HTML riktlinjer

Vi kodar HTML och använder template språk Handlebars.js
Undvik att implementera logik i hbs-filerna. I några av våra webbplatser har vi JSP också.

CSS

CSS riktlinjer

Prefix/namespace: Alla våra klasser ska ha ett prefix/namespace, på Styleguide s_ och lokalt på presentationstjänsterna tar vi prefix från tjänstens namn tex Mina Utbetalningar mu_


BEM

Vi använder BEM namnstandard, Harry Roberts variant för att namnge css-klasser. Det innebär att vi delar in sidan i block och element (=htmltaggar) i block. Ett block är t ex


Element som hör till ett block namnges med blockets namn först, sedan __ och sedan elementets namn


Det finns inga nivårer av element, element i element namnges bara som "blockets-namn__elementets-namn". Om det finns behov av att ytterligare bryta ut delar så kan man påbörja ett nytt block. Element och block kan ha modifier-klass som signalerar att det är en variant av det ursprungliga elementet. Modifier-klassen läggs på förutom basklassen t ex


Flytta gärna css som måste överlagras till modifier-klassen för att undvika onödig överlagring. Det är okej med element som inte finns i sin basform utan bara med olika modifiers.

State-klasser

Element och block kan ha en state-klass som signalerar att det befinner sig i ett visst tillstånd. Detta används ofta när man med javascript vill förändra ett element och markera att det är aktivt, expanderat, felaktigt etc. State-klassen läggs på ytterligare till elementet. State-klasser börjar med ```is-``` (förutom namespace)


.s_contact-form__input {
//style för element

&.s_is-error {
//style för element när det är fel
}
}

Filstruktur

Varje css-block (se ovan) ska ligga i en fil som heter samma som blocket. Vi använder _ för att markera sass-filer som ska inkluderas i andra.


I en fil med namnet `_contact-form.scss` får bara klasser som börjar med `.s_contact-form` finnas.** State-klasser (.s_is-..) undantaget. Om ett block behöver stylas olika beroende på dess kontext ska en modifier läggas på (istället för att styla på förälderns klass).

Formatering av koden

Vi utgår ifrån default uppsättning av regler i [sass-lint](https://github.com/sasstools/sass-lint) med några få undantag, se sass-lint.yml i styleguide All css som berör ett element ska ligga inuti det elementets måsvingar. Det gäller såväl modifier-klasser, state-klasser, mediaqueries och saker som påverkas av en förälder (inom blocket). Exempel:

.s_contact-form__input {
font-size: 1.2em;

@include s_mq-gte-small {
font-size: 1.4em;
}

&.s_contact-form__input--left {
float: left;
}

&.s_is-active {
font-weight: bold;
}

.s_contact-form.s_is-error & {
border-color: $color-error;
}
}

Vad vi stylar på

Vi använder med få undantag klasser för att styla element. Normalize-css och bas-css får sätta style direkt på htmltagg. I det fall vi inte kan påverka html (det kommer från CMS) kan vi styla direkt på element inom blocket.


Gömma element

För att dölja/gömma element används attributet hidden. Exempel:


.s_some-block__some-element {
//style för element

&[hidden] {
//dölj element med hidden attribut
display: none;
}
}

Andra riktlinjer för sass

  • Alla färger deklareras i varibler
  • Använd $_ för att markera en variabel som bara används lokalt i nuvarande fil
  • Använd mixins, inte extends

JavaScript

JavaScript riktlinjer

Ramverk/bibliotek: Vi använder så få ramverk och bibliotek som möjligt för att sidan inte ska bli för tung. Det är okej att använda små bibliotek (max 5kB) som utför en specifik uppgift där vi vinner tid och förvaltningskostad på att använda ett färdigt bibliotek. Bibliotek hämtas ner via npm och laddas mha


där de används. Webpack ser till att biblioteket bara laddas en gång.

Namnstandard

  • Namnge filer med små bokstäver och bindestreck mellan orden
    
        
  • Namnge test-filer med .test på slutet
    
        
  • Namnge konstanter med stora bokstäver
    
        
  • Namnge klasser med stor bokstav först
    
        
  • Använd generellt camelcase i övrig javascript
    
        
  • Namnge variabler som håller DOM-element med $ först
    
        
  • Namnge privata metoder (som inte är tänkta att användas utanför klass/modul) med _
    
        

Moduler

Vi använder tre sätt för att skriva javascript-moduler, klasser, objekt eller funtioner.

Klasser

Klasser ska användas för moduler som kan ha flera instanser på samma sida. Se till att koden inuti klassen inte jobbar med element globalt, utan alltid letar efter element inuti elementet som modulen initieras i.


Initiera klass från "index.js"


Objekt

Ifall du är säker på att din modul bara ska köras en gång per sida bör du använda ett objekt istället för klass. Det blir ett naturligt singleton och det är lättare att förstå att modulen bara kan initieras en gång per sida.


Initiera objekt från "index.js"


Funktion

I de fall javascriptet är mycket enkelt kan det gå att göra som en ren funktion. Exempel på detta är index-filerna som bara initierar komponenter.


Css klasser i javascript

  • Klasser som används av javascript ska prefixas
    
        
  • Klasser som är prefixade "s_js-" får ej användas av css för styling, element som används av javascript har alltså en klass för javascript och en för styling
  • Klasser som används för att initiera en viss javascriptmodul får gärna heta som modulen fast med prefix först dubbla klassnamn, ett för js och ett för css
    
        
    
        
  • Klasser som används för att hitta element inuti modulen namnges enligt BEM standard precis som för vanliga css-klasserna
    
        
  • State-klasser får sättas direkt av javascript, dessa börjar alltid med "s_is-" och beskriver ett tillstånd på ett element
    
        
  • State-klasser får användas av både javascript och css

Dölja element

Använd gärna attributet ```hidden``` för att dölja/visa element. Lägg dit attributet för att dölja elementet, ta bort det för att visa elementet.



Parametrar och statiska variabler till moduler

Använd gärna data-attribut för att skicka in parametrar/variabler till javascript-moduler. Data-attributen ska namnges med prefix "data-s_"


Logiska variabler

För att göra koden mer läsbar kan man använda logiska variabler. D.v.s. variabler som beskriver ett tillstånd istället för att lista en lång komplex if satts.

Excempel:

logicVar = (a && b) || c;
if(logicVar){...}

-----

const personIsValidPensionReceiver = isPerson(person.pNumber) && person.isValid || person.hasExemption;
if(personIsValidPensionReceiver){...}

Länkar

Tillganglighet

Tillgänglighet riktlinjer

  • Huvudinnehåll är åtkomligt utan javascript
  • Rätt html5 element (article, header, footer, main mm)
  • Korrekt rubrikstruktur (h1 -> h2 -> h3 osv, börja om på h1 inuti article)
  • Formulär använder fieldset+legend för att gruppera fält och label finns för alla fält
  • Färgkontrast - text mot bakgrund (kolla med Color contrast check)
  • Tabba genom sidan funkar bra (även fäll in/ut funktioner etc)
  • Tabbfokus syns tydligt (ram med bjärt färg, t ex turkos, runt elementet)
  • Felmeddelanden läses upp (lägg role="alert" och aria-live="assertive" på elementet)
  • Element som fäller ut annat innehåll markeras med aria-expanded=true/false och aria-controls (som hänvisar till utfällt element)
  • Använd riktigt button-element för knappar (istället för att lägga role="button" på annan tagg)
  • Använd autocomplete="new-password" för att undvika browserns automatiska ifyllnad.
  • För obligatoriska fält, sätt attributet required (undvik aria-required).

Axe-Core tillgänglighetstestning

För att stödja dig som utvecklare i att koda tillgängligt, använder vi JS-libbet Axe-core i våra dev-miljöer. Det validerar den färdigrenderade sidan mot WCAG 2.1. Om sidan har valideringsfel, rapporteras dessa i sidhuvudet. Axe-core körs alltså enbart i dev-miljöer (hostnamn måste börja på 'dev-').

Om du vill använda Axe i valfri annan miljö, kan du antingen skapa en kaka i LocalStorage med namnet 'va_enabled'. Du kan även kicka igång Axe i konsollen med 'window.pm.devTools.validateAccessibility.init()'. Det kan vara användbart för att kontrollera dynamisk HTML som ändrats efter den initiala sidrenderingen.

Testa gärna som om du vore blind/synskadad genom att köra sidan med ChromeVox (plugin till Chrome).

Här nedan följer lite aria-tips

  • Använd alltid lämpligt "role"-attribut i samband med aria för att få aria-attributet att fungera
  • aria-label - Läser upp angiven text om label inte finns
  • aria-labelledby - Läser upp texten i angivet element om label inte finns
  • aria-describedby - Läser upp texten i angivet element
  • Inkludera inte mixins från Styleguide till en presentationstjänst, använd css klass istället tex s_icon-plus

Visual Regression Test

Jobba med Visual Regression Testing

Deploya dina ändringar till din Openshift miljö.

Navigera till terminalen under ps-styleguide och kör:


När testarna har körts, öppnas en ny flik i webbläsaren där testresultatet visas. Verifiera att endast dina ändringar färgmarkerats som diff.

Om du vill acceptera resultatet kör du "npm run regression:approve". Nya versioner av de bildfiler du förändrat kommer då att skapas. Gör "git commit" och "git push" endast på de nya versionerna.

Så skapar vi ett test

Det finns flera implementationer att skapa test med.
Under kataloggen styleguide/ps-styleguide/visual-regression/tests/
finns:

  • baseScenarios.js
  • elementsScenarios.js
  • componentsScenarios.js
  • developersScenarios.js

Det är indelat såsom de olika sidor på Styleguide.
tex om man skapar en ny section på base, då kan man lägga en ny entry i arrayen ['color', 'typography', 'space'] under baseScenarios.js,
Under elementsScenarios.js finns det flera mer interaktion med element för att skapa avancerade test. text


Expandable

Expandable är en egenskap man kan sätta på ett block som visar ett annat block

Expandable lägger också en ikon på trigger-elementet

Expandable

Jag blev öppnad!

Smooth scroll to

Egenskapen placerar önskat yta i fokus för användaren vid klick på ett element som har klassen "s_js-smooth-scroll-to"



Table

Header 1 Header 2 Header 3 Header 4 Siffor
column 1 column 2 column 3 column 4 456 789kr
column 1 column 2 column 3 column 4 8366%
Länk i tabell Länk i tabell Länk i tabell Länk i tabell Länk i tabell
Summa 1 Summa 2 Summa 3 Summa 4 Summa 5

ResponsiveTable

Main

Detta är exempel på hur en responsive-table ser ut och fungerar

Header 1 Header 2 Header 3 Header 4 Header 5 Header 6
En himla responsiv tabell
Alfredo Förändring i år %: 10 000 Innehav sedan: 10 000 Förändring i år %: 10 000 Förändring i år kr: 10 000 Snitt/år: 10 000 Förändring sedan köp: 10 000 Värde: 10 000
Bergamo Förändring i år %: 10 000 Innehav sedan: 10 000 Förändring i år %: 10 000 Förändring i år kr: 10 000 Snitt/år: 10 000 Förändring sedan köp: 10 000 Värde: 10 000
Cellus Förändring i år %: 10 000 Innehav sedan: 10 000 Förändring i år %: 10 000 Förändring i år kr: 10 000 Snitt/år: 10 000 Förändring sedan köp: 10 000 Värde: 10 000
Totalt värde: 10 000 Totalt 10 000

Code

Exempel på html-kod för responsive-table

Skapar upp en responsiv tabell.


Panel

Panel är en återkommande design mönster för att få en information att sticka ut

Standard varianten

Detta är huvudet i panelen

Variant med kropp

Detta är huvudet i panelen

Detta är kroppen i panelen

Variant med annan border

Detta är huvudet i panelen

Detta är kroppen i panelen

Confirm-variant

Detta är huvudet i panelen

Detta är kroppen i panelen

Flow-variant

Flödespanelen krävs att den ligger i någonting (t.ex. container)

1

Detta är ett besökt stegs panelhuvud

Steg 1 av 3
Detta är ett besökt stegs panelkropp
1

Detta är ett aktivt stegs panelhuvud

Steg 2 av 3
Detta är ett aktivt stegs panelkropp
1

Detta är ett obesökt stegs panelhuvud

Steg 3 av 3

list

Onumererad lista

  • En punkt
  • En till punkt

Horisontell lista

  • En sak
  • En till sak

Punktlista

  • En sak
  • En till sak

Lista med ikoner

  • En punkt med en text som är ganska lång och som orsakar tre radbrytningar
  • En till punkt

Cirkel

Cirkel kan användas som den är eller med infomation i.

Standard varianten med och utan info

1

Border variant

1
2
4

Liten variant

1
2

box

Box är en container med border och padding

Kommer säkert kompletteras med fler varianter

Standard varianten

I'm a box

container

Container används för att skapa ytor för t.ex. cta-formulär och onboarding.

Container med outer-klass reglerar centrering av innehållet. Genom att använda inner-klassen regleras marginaler uppåt och nedåt. Content-klassen används för att få padding för innehållet samt reglera bakgrundsfärg (t.ex. cta-kvitto).

Container utan style (t.ex. för att positionera sidrubrik)

I'm a container

Attention-container för t.ex. onboarding-ytor

I'm a container

CTA-container för formulär

I'm a container
I'm a container

Formulär

Formulär och dess komponenter

För att gruppera flera komponenter används fieldset och legend motsvarar då h3-rubriker.

Textfält för kontaktuppgifter
Checkbox
Radioknappar
Avbryt

LabelText

Small label 1 Text 1
Small label 2 with much content that wont fit in the assigned space Text 2
Medium label 3 Text 3
Large label 4 Text 4
Large label 5 Text 5 with much content that wont fit in the assigned space
Label 6 only with no text
Text 7 only with no label
Label 8 with small font Text 8 with small font
Label 9 with large font Text 9 with large font
Label 10 Text 10 contains inline html

Print

Main

Detta är exempel på hur en print-knapp ser ut och fungerar

Code

Exempel på html-kod för en print-knapp

Lägger till print-style och icon till en knapp samt kopplar en funktion för att öppna webbläsarens utskrift-funktion när man klickar på knappen.


ExpandAll

Main

Detta är exempel på hur en expand-all-knapp ser ut och fungerar

Code

Exempel på html-kod för en expand-all-knapp

Expanderar t.ex alla expandable-panels på en sida.


ShowHide

Main

Detta är exempel på hur en show-hide ser ut och fungerar

Code

Exempel på html-kod för show-hide

Kopplar event för att visa/dölja html-element. Funktionen initieras genom att sätta css-klassen ps_js-show-hide på ett html-element, t.ex. button, checkbox, radio, select. Sedan använder man följande data-attribut för att ange vad som ska visas/döljas:

data-show Ange en komma-separerad lista med css-selektorer för html-element som ska visas när man klickar på detta element.


data-hide Ange en komma-separerad lista med css-selektorer för html-element som ska döljas när man klickar på detta element.


data-toggle Ange en komma-separerad lista med css-selektorer för html-element som ska visas/döljas när man klickar på detta element.


data-toggle-select Ange en komma-separerad lista med css-selektorer för html-element som ska visas när man väljer respektive option i selecten, övriga element kommer att döljas.


EnableDisable

Main

Detta är exempel på hur enable-disable fungerar





Code

Exempel på html-kod för enable-disable

Kopplas till ett html-element genom att sätta klassen s_js-enable-disable. Gör sedan andra html-element enabled/disabled med hjälp av följande data-attribut som antingen tar en css-selector eller en komma-separerad lista med css-selectorer:

  • data-enable Gör ett eller flera html-element enabled
  • data-disable Gör ett eller flera html-element disabled
  • data-enable-disable Togglar ett eller flera html-element enabled/disabled

Clear

Main

Detta är exempel på hur en clear ser ut och fungerar

Code

Exempel på html-kod för clear

Kopplar event för att rensa html-element. Funktionen initieras genom att sätta css-klassen s_js-clear på ett html-element, t.ex. button, checkbox, radio. Sedan använder man data-attributet data-clear för att ange css-selectorer för de element som ska rensas.


Filter

Planerare

Planerare!

Småbarnförälder/väntar barn

sma-barn-vantar-barn!

Anställd

Du börjar tjäna in till tjänstepensionen den månad du fyller 25 år och du fortsätter tjäna in till du är 65 år. Är du målare eller elektriker börjar du tjäna in pengar till din Avtalspension SAF-LO från 13 års ålder.

Fel

Ett tekniskt fel har uppstått

Vår webbplats verkar ha fått tekniskt fel. Försök gärna igenom om en stund och se om det fungerar, eller ta kontakt med oss så hjälper vi dig.

Kontakt 0771-776 776

PnrInput

Main

Detta är exempel på hur en pnr-input ser ut och fungerar

Code

Exempel på html-kod för pnr-input

Formaterar angivet personnummer enligt [ÅÅÅÅMMDD-XXXX] när användaren lämnar fältet. Personnummer kan anges som:

  • [ÅÅÅÅMMDD-XXXX]
  • [ÅÅÅÅMMDDXXXX]
  • [ÅÅÅÅMMDD XXXX]
  • Alla varianter med mellanslag och bindestreck

DateInput

Main

Detta är exempel på hur en date-input ser ut och fungerar

Code

Exempel på html-kod för date-input

Lägger till en datepicker samt formaterar angivet datum enligt [ÅÅÅÅ-MM-DD] när användaren lämnar fältet. Datum kan anges som:

  • [ÅÅÅÅ-MM-DD]
  • [ÅÅÅÅMMDD]
  • [ÅÅÅÅ MM DD]


YearMonthInput

Main

Detta är exempel på hur en year-month-input fungerar

Code

Exempel på html-kod för year-month-input

En månadsväljare kommer att visas när fältet får fokus. Antalet månader som visas i månadsväljaren kan begränsas genom att ange antalet månader bakåt med attributet data-min-months och framåt med attributet data-max-months. Formaterar angivet datum enligt [ÅÅÅÅ-MM] när användaren lämnar fältet. Input kan anges som:

  • [ÅÅÅÅ-MM]
  • [ÅÅÅÅ MM]
  • [ÅÅÅÅ/MM]
  • [ÅÅÅÅMM]


AdaptiveSelect (Multi-select och Input-select)

Main

Detta är exempel på hur en multi-select ser ut

Detta är två exempel på hur en input-select kan se ut

Code

Kodexempel på multi-select med default option samt två options valda


Kodexempel på input-select där listan visas vid fokus


Kodexempel på input-select där listan endast visas vid inmatning med max 5 förslag


AddRemove

Main

Detta är exempel på hur en add-remove ser ut

Code

Exempel på html-kod för add-remove


Exempel på hur man initierar en add-remove

Komponenten initieras automatiskt om man lägger till css-klassen "s_js-add-remove--init". Om man har javascript-funktioner som behöver köras på något html-element när man har lagt till en ny rad så får man ta bort "--init" från css-klassen och sedan själv initiera komponenten. I det fallet lägger man till en callback- parameter med en callback-funktion som kommer att köras varje gång en ny rad läggs till.

När en ny rad läggs till så kopieras första raden och alla input- och select-element rensas och namnen indexeras om. Eventuella komponenter kommer att initieras automatiskt.


Flow (FlowService/FlowPanel)

Main

Detta är exempel på hur ett ansökanflöde ser ut

Ansökanflöde

Detta är ett exempel på ett ansökanflöde där första steget laddas i formulärläge. Kunden fyller i information och går sedan vidare till formulärdelen i nästa steg. Föregående steg visar då sin granskadel med det ifyllda datat. Kunden kan alltid gå tillbaka och ändra tidigare steg men måste då gå igenom efterföljande steg igen.

1

Steg 1

Steg 1 av 3
Rubrik
Formulärdata
Avbryt
2

Steg 2

Steg 2 av 3
3

Steg 3

Steg 3 av 3

Code

Exempel på html-kod för ett ansökanflöde

Ett flöde har en flödesrubrik samt flödesinfotext. Varje steg i flödet har en stegrubrik och stegmarkeringar samt en formulärsdel (med rubrik och html-innehåll) och en granskadel (med rubrik och html-innehåll). Html-innehållet i stegen brukar oftast klientrenderas.


Exempel på js-kod för ett ansökanflöde

Ett ansökanflöde skapas upp genom att skapa en FlowService (med tjänstens namn (för adobe analytics) samt en lista med flödesstegen (html-element) som inparametrar). Flödet kan sedan initieras med serverlagring initWithServerStorage eller med klientlagring initWithClientStorage, där båda metoderna tar fyra parametrar:

  • panelConfig objekt med flödeskonfiguration inkl. validering för varje steg (se exempel nedan).
  • loadForms (default true) ska formulärdelarna laddas direkt när sidan laddas eller först när man går framåt i flödet.
  • loadReviews (default false) ska granskadelarna laddas direkt när sidan laddas eller först när man går framåt i flödet.
  • isFlow (default true) ska sättas till true för ansökanflöden.

Flow Change (FlowService/FlowPanel)

Main

Detta är exempel på hur ett ändringsflöde ser ut

Ändringsflöde

Detta är ett exempel på ett ändringsflöde. Varje steg laddas i granskaläge och visar kundens data. Genom att klicka ändra på en granskadel kommer kunden till motsvarande formulärdel och kan där göra ändringar. När kunden sedan klickar "Spara ändring" så visas åter granskadelen med ändrad data.

1

Bostadsinformation

Din bostad

Bostadstyp Hyrd bostad
Hyresfria månader Januari Februari Juni Juli

Bostadskostnad

Månadshyra 5000 kr
2

Information om pension

Din pension

Granskningsdata
2

Information om pension

Kontaktuppgifter
Kontaktdata
Godkänn och intyga

Code

Exempel på html-kod för ett ändringsflöde

Ett flöde har en flödesrubrik samt flödesinfotext. Varje steg i flödet har en stegrubrik och stegmarkeringar samt en formulärsdel (med rubrik och html-innehåll) och en granskadel (med rubrik och html-innehåll). Html-innehållet i stegen brukar oftast klientrenderas.


Exempel på js-kod för ett ändringsflöde

Ett ändringsflöde skapas upp genom att skapa en FlowService (med tjänstens namn (för adobe analytics) samt en lista med flödesstegen (html-element) som inparametrar). Flödet kan sedan initieras med serverlagring initWithServerStorage eller med klientlagring initWithClientStorage, där båda metoderna tar fyra parametrar:

  • panelConfig objekt med flödeskonfiguration inkl. validering för varje steg (se exempel nedan).
  • loadForms (default true) ska formulärdelarna laddas direkt när sidan laddas eller först när man ändrar ett block.
  • loadReviews (default false) ska sättas till true för ändringsflöden.
  • isFlow (default true) ska sättas till false för ändringsflöden.

Divider

Main

Divider s_divider
Divider s_divider--readmore

Code

s_divider




Divider med modifier s_divider--readmore


CharacterCounter

Main

Detta är exempel på hur en CharacterCounter fungerar

Code

Exempel på html-kod för CharacterCounter

Lägger till en teckenräknare till textarea-element. Detta sker i de fall elementet har ett maxlength-attribut samt klassen s_js-character-counter


js-required

Main

När användaren stängt av JavaScript och funktionalitet kräver det. Visa info meddelande samt lägg til cssklass "s_js__required"

Code

Exempel på html-kod för en js-required

Visar info meddelande som frågar användaren om att tillåta JavaScript

Din webbläsare stödjer inte javascript

För att kunna använda tjänsten behöver du tillåta javascript.


Disclaimer (Friskrivning)

Main

Detta är exempel på hur Disclaimer (friskrivning) ser ut och fungerar

En friskrivningstext enligt nedan ska finnas omedelbart före varje knapprad med en signeringsknapp där användaren kan starta en signering.

Ansökanflöde

Detta är ett exempel på ett flöde med avslutande signering.

1

Steg 1

Rubrik
Formulärdata

Beställningen genomförs när en bekräftelse visas i webbläsaren efter du skrivit under.

Avbryt

Code

Exempel på html-kod för Disclaimer

Lägg till styleguide/disclaimer omedelbart före raden med signeringsknappen i hbs-filen.


Friskrivningstexten hämtas från Styleguide. Om en annan text önskas, kan den skickas som argument till styleguide/disclaimer.


Exempel på resulterande html-kod där en disclaimer lagts till:

Ansökanflöde

Detta är ett exempel på ett flöde med avslutande signering.

1

Steg 1

Rubrik
Formulärdata

Beställningen genomförs när en bekräftelse visas i webbläsaren efter du skrivit under.

Avbryt

Template-component

Main

Detta är sg_box en komponentmall med tabs för styleguide

Som utvecklare kopierar du mappen "template-component" och börjar implementera din kod med hjälp av den.
Mappen finns på path: resources\templates\components\template-component

Code

Example: Knapp med ikon


Info

Filstruktur

sg_box har en tydlig filstruktur. Namnet på innehållet man vill presentera är basen.
Bilden visar filstruktur på template-component
Tabs mappen innehåller .hbs filer med innehåll för respektive tab.