OrgPad logo

CSS

Created by Honza Šuráň

An OrgPage about CSS with examples

#clojurescript, #html, #javascript, #web design, #web development

CSS

HTML

complete YouTube video

the basics

a few links

w3schools

grid

flexbox

animations

animace: vlastnosti

Doba animace:
animation-duration: 4s;
proč to bez toho nefunguje: doba trvání je totiž nastavena na nulu. animace se provede a vrátí do původního stavu

Základní styl animace:
animation-timing-function: linear/ease...;

Zpoždění:
animation-delay: 2s;   <-animace se začne přehrávat po 2s
animation-delay:-2s;   <-2s z animace už uběhly

Počet přehrání animace:
animation-iteration-count: 2;   <-provede se dvakrát
animation-iteration-count: infinite;   <-než zavřeme webovku

Směr animace:
animation-direction: normal/reverse/alternate/alternate-reverse;
alternate: provede se a vrátí do původního stavu

A nebo to shrneme v jedno:
animation: název doba-trvání styl zpoždění počet směr;
animation: red-to-black 4s ease 2s 2 alternate-reverse;
popř. různé prohlížeče: -webkit-animation: ...

transitions

w3schools

css tricks

pro celý efekt je potřeba správné užití pseudoselektorů a efektu přechodu

transition: co-se-mění za-jakou-dobu jakým-způsobem zpoždění
transition: attribute time transition-type delay
(ease, linear, ease-in, ease-out, ease-in-out, 

+pseudoselektor, příklad:

image

nemusí to vždy fungovat na všech prohlížečích. proto se dá nastavit přechod pro každý prohlížeč jiný:
-webkit-transition... (chrome, safari)
-moz- (firefox)
-o- (opera)

více parametrů:
transition: [par1] [hodnota1], [par2] [hodnota2], ...;

jak nalinkovat css soubor na html soubor

Řekněme, že mám složku "css" a "html", každá slouží na ukládání buď css, nebo html souborů

>moje webovka
   >html
      >index.html
      >stránka2.html
   >css
      >index.css

jak nalinkuju index.css na index.html?

jdu do index.html a do sekce <head> zadám:

<link rel="stylesheet" type="text/css" href="..css/index.css">

animace: aplikace

Takto se přiřadí animace k určitému prvku. Ta však stále nebude fungovat, je potřeba tam přidat další vlastnosti - viz další buňka

image

rotation

transform: rotate("angle" deg);
e.g. transform: rotate(90deg);
         transform: rotate(-45deg);

mustn't have a space between angle and unit!

other useful units: turn (=360°), rad (=180°/π)

3d rotation

Rotate along the X-axis:
looks as standard 2d rotation from the right side

transform: rotateX(30deg);

image

Rotate along the Y-axis:
looks as standard 2d rotation from the bottom

transform: rotateY(-0.4rad);

image

Rotate along the Z-axis:
is equal to standard 2d rotation

transform: rotateZ(0.25turn);

image

Save your time:

(mp = multiplier)
transform: rotate(x-,p, y-mp, z-mp, of-a-value);

transform: rotate3d(0.5, -0.75, 0.3, 0.1turn);
instead of rotateX(18deg);
                     rotateY(-27deg);
                     rotateZ(0.1turn);

image

seznam+tabulka

li:first-child{ - první řádek seznamu či tabulky

color: green;

}

first-child;

last-child;

nth-child(n);

li:only-child - pokud má některý seznam či tabulka pouze 1 prvek

but the best is to use "grid-area"

grid-area: row-start / col-start / row-span / col-span
(or row-end instead of row-span/col-end, respectively)

grid-row: 2 / 4;
grid-column: 1 / 4;

grid-area: 2 / 1 / span 2 / span 3;
is basically a rectangle with its top left vertex [x; y] and a vector →(x; y) leading up to its bottom right vertex

state change

příklad: hover

#odkaz:hover{

color: red;

}

co se stane?

když přejedu myší po daném prvku, který je svázán s tímto ID, barva se změní na červenou

direct child selector "a > b"

div > span{
...}

every direct child - in this example (div→span) every span in a div, but if the structure was div→p→span, this selector wouldn't apply on the span

animace: vytvoření

základní schéma

image

příklady na dalších stránkách

animace se bude měnit různě v jejich různých stadiích:

image

@keyframes jméno-animace{
   první-část {funkce-1: argument; ...funkce-n: argument-n;}
   atd., obdobně

transformační funkce

basic syntax:

transform: function(parameters);

rozdílné situace k používání

classy tvoříme k tomu, abych je použili víckrát = u více prvků

ID používáme pouze u jednoho prvku

opačně by to sice vzhled stránky nijak nezměnilo, ale je to taková úmluva pro lepší přehlednost

proto mají vlastně ID přednost, protože jsouo pouze na jedno použití. pro nějakou classu můžeme něco specifikovat, pomocí ID pak můžeme udělat výjimku

pseudoselektor

mají speciální vlastnosti

nemusí se vztahovat pouze na elementy, ale i classy a ID

any-depth child selector "a b"

p a:link {
   color:red;
}

in this example, all links which are anywhere inside a paragraph get red color

common sibling selector "a ~ b"

textarea ~ button{
   ...
}

every button that is in the same layer and has the same parent element

pojmenovávání sloupců/řádek & opakování

image

image

 

 

image

functions

calc(calculation) - allows us to calculate some dimensions more dependent on other sizes

scale

transform: scale(2.5);

content, padding, border, margin - all ×2.5

scaleX(arg);
scaleY(arg);
where "arg" is the multiplier

shifting

translate(Δx Δy)
move an object Δx a long the x-axis, Δy  along the y-axis (can also be defined in 3d with "translate3d(Δx, Δy, Δz)"with Δz=0)

image

element selector

HTML:

<p>...</p>

CSS:

p{

} - vybere všechny sekce html souboru s tímto tagem

elements containg more grid windows

CSS:

image

 

image

image

What happened? Element nr. 1 starts  on the start of the first column and ends on the end of the second/start of the third → therefore 1 / 3

equivalent to this would be:
grid-column: 1 / span 2;
grid-row: 1 / span 2;
=start on the first row/col and take up two of them in the flex-direction

specifičnost selektorů

in-line specifikace (style)

ID

class

element

*ano, je to prasárna*

odkazy

a:link - defaultní vzhled odkazu

a:visited - po kliknutí

atd.

combining selectors

we use them whenever there is any dependency between styled elements

pravidelné mezery mezi sloupci/řádky

image

zjednodušeně:
grid-gap/gap: <řádkování> <sloupcování>;
grid-gap: 150px 250px;

css-tricks: top webpage with great examples

w3schools: webpage with everything, including an HTML & CSS code editor

class selector

HTML:

<p class="cl8ss">...</p>

<h3 class="cl8ss">...</p>

CSS:

.cl8ss{

} - vybere všechny classy takto pojmenované

rozdíly:

advanced selectors

CSS combinators

direct sibling selector "a + b"

h2 + a{
   ...
}

only adjacent links: they have to be directly after h2 header

align-items: in terms of height of all individual rows

zarovnání prvků v řádcích

image

příklady na další straně

image

image

image

image

SELECTORS

pomocí nich se vybírá určitý prvek html dokumentu, který poté bude vizual

základní atributy kontejneru

grid-template-columns: sloupec1 sloupec2 sloupec3 ...;
grid-template-rows: řada1 řada2 řada3 ...;

zkráceně:
grid-template: řada1 řada2 řada3 ... / sloupec1 sloupec2 sloupec3 ...;

definuje řady mřížky, jak mají být každá vysoká

image

na druhé straně 

ale grid je chytrý!  :-)

image

image

GRID

css-tricks: flexbox

atributový selektor

h2[class=subtitle]{

...}

vybere všechny h2 nadpisy, které mají class se jménem "subtitle"

 

jak to využít u obrázků?

HTML:

<img src="../obrazky/vlci_mak.jpg" width="120" height="80">

<img src="../obrazky/pampeliska.jpg" width="180" height="120">

CSS: jak vyberu oba naráz?

img[src^="../obrazky/"]{

border: 8px solid red;

}

-> každý obrázek, u kterého atribut "src" začíná takto

nebo vše co takto končí:

img[src$=".jpg"]{

...}

nebo vše co to někde obsahuje:

img[src*="razky/"]{

...}

další atributový selektor: white-space selector

<h2 class="subtitle article-subtitle"></h2>
<h2 class="article-subtitle subtitle2"></h3>
<h2 class="subtitle3 article-subtitle"></h2>
 
h2<class~=article-subtitle]{
...}

hledá, zda se někde tato třída nachází

developer mozilla: custom editor with a ready code you can edit how you need

ID selector

HTML:

<p id="ahaha">...</p>

<p id="ahaha">...</p>

CSS:

#ahaha{

}

align-content: jsou-li řádky dohromady nižší než grid než mřížka, mají se posunout nahoru, dolů, na střed...?

zarovnání řádků dle mřížky

image

příklady na dalších stranách

image

image

image

image

image

image

image

alignment

Note: this OrgPage is very old, not very good. I want to make a new one in the near future, but right now, I still have a lot of work with other things.

background

background-color

color:

background-color: #RRGGBB
or background: #RRGGBB

whole page:
body{
   background-color: blue;
}
 
individual element classes
.titles-1{
   background-color: #123456;
}

JEDNOTKY

pixely:

napůl to i to - záleží na přístroji. velká telka může mít stejné rozlišení jako mobil, ale pixely jsou větší.

DPI (dots per inch): čím větší DPI, tím více pixelů se vejde na jeden palec -> tím jsou menší -> to znamená, že např. mobily mají větší DPI než televize

další atributový selektor

h2[class|=article-subtitle]{
...}

->vybere všechny h2 nadpisy, které mají classu "article-subtitle" nebo "article-subtitle-..."

k čemu? větší projekt:

article-subtitle-článek1
article-subtitle-článek2
article-subtitle-článek3

justify-content: in terms of all individual columns given the total grid width

alignment of all columns given the grid width

image

examples on following pages

image

image

image

image

image

image

image

how to create a grid?

similar to flexbox

image

ATTRIBUTES

attribute: value;

another-attribute: another-value;

color opacity

color: rgba(r, g, b); <- nic se nestane

color: rgba(r, g, b, a); (a=alpha)
color: rgba(200, 50, 85, 0); <- viditelnost 0 (0 %)
color: rgba(200, 50, 85, 1); <- viditelnost 1 (100 %)

různé vlastnosti pozadí

background-repeat: repeat; <- defaultní nastavení

backgroundrepeat: no-repeat; <- použije obrázek, ale jeho rozměry zůstanou stejné a část prostoru nevyplněná

background-repeat: no-repeat;
background-color:red;
-> zabarví se červeně, část pozadí bude nahrazena obrázkem

background-size: 50px 100px; ->nejprve šířka, pak výška

backround-size: cover; <-pokryje celý displej bez opakování, aby se zachoval poměr stran -> např. na celý displej přetransformuje velikost na 1920px 1080px

background-size: contain <- pokusí se resizenout, aby velikost zůstala stejná

relativní

width: 70 % (zabere 70 % šířky displeje no matter what)

2em: všechny fonty 2krát větší než v běžné velikosti

vh (view height), vw (view width): 1vh/vw = jedna setina body width nebo height

absolutní

mm

cm

pt: typografický bod - trochu větší než pixel

pc: pica - 12krát větší než pt

in: palec ~ 2,54cm

justify-items: je-li prvek užší než sloupec, má se posunout na jeho pravý/levý kraj/střed...?

zarovnání jednotlivých prvků vzhledem ke sloupcům mřížky
bez předpony "grid-" na rozdíl od flexboxu

image

příklady na dalších stranách

image

image

image

image

gradient

=barevný přechod

lineární

color: linear-gradient(to right, yellow, purple);

to right: to znamená, že barevný přechod půjde doprava (zleva)
poté se dají přidat různé barvy, různé množství barevyellow-purple

dá se požít také jako přechod do bezbarvého pruhu:

12color: linear-gradient(to up, rgb(0, 0, 0), rgba(0, 0, 0, 0)
color: linear-gradient(0deg, rgb(0, 0, 0), rgba(0, 0, 0, 0)

flex-direction & flex-wrap

.container{
...
   flex-direction:row; <-defaultní
}

flex-wrap: wrap;
image
flex-wrap: nowrap;
imageflex-wrap: wrap-reverse;
image

border

complete list
Uniform common border):
border: [border size] [border style] [border color];
border: 0.5vw dotted rgba(153, 255, 0,0.5);

image

image

barva

  1. předdefinované barvy: "green, blue, black, orange..."
  2. hexadecimální kód reprezentující RGB: #RRGGBB
    např. #420F69
  3. RGB zápis: rgb(66, 15, 105)
  4. 7148707-illustration-of-a-rgb-color-circle

flex

funguje jako zjednodušení těchto tří základních atributů: flex-basis, flex-grow, flex-shrink

v tomto pořadí:
flex: grow shrink basis;

image

zmenšeno:

image

zvětšeno:

image

radiální

color: radial-gradient(yellow, green, blue, purple);

radial-yellow-green-purple

ale to není vše! můžeme si zvolit, jaká barva bude mít jaké zastoupení.

konkrétně zde:
color: radial-gradient(yellow 15%, green, 50%, blue 25%, purple 30%);

radial-yellow-green-purple

tvar: ellipse, circle:

color: radial-gradient(circle, yellow 15%, green, 50%, blue 25%, purple 30 %);

flex-shrink

problém je, že jakmile bude místo na prvek menší než hodnota flex-basis, či přímo v css kódu u container-itemu, přesune se daný prvek na další řádek v daném kontejneru. co když to ale nechci?

defaultní hodnota: 1: povolí automatické zmenšování prvků

imageimage

0: zablokuje automatické zmenšování prvku - př.: "D"

image

image

flex-shrink>1 - např. 3: daný prvek se zmenšuje 3x rychleji než ty ostatní

imageimage

flex-grow & flex-basis

HTML:

flex-basis: základní velikost

image

image

U třetího prvku "C" trochu pozměníme kód: Ten prvek dostane 2x více místa co ostatní.

image

image

Musíme to přidat všude!

image

image

Jinak totiž daný prvek sežere všechno místo!

defaultní hodnota je 0, neboli žádný prvek nemůže zabírat místo navíc.

podle toho, kolik jakáý prvek má, se rozdělí místo navíc podle hodnoty flex grow v daném prvku: hodnota v prvku/celková hodnota*(místo celkem-zabrané místo).

když zvětším/zmenším okno prohlížeče, prvky se automaticky zvětší/zmenší.

viditelnost

visibility: visible/...;
visible - je vidět
hidden - není vidět
collapse -tabulky atd. - např. zmizí nějaký řádek, neovlivní to ale layout zbytku
initial - výchozí
inherit - převezme od parent elementu

mixed border

image

Can also be written like this with the same effect:

image

+ TEXTU

čára v textu:
.odkazy1{
   text-decoration: none; <--odstraní čáry z textu
}
dále: underline, line-through, overline

změna velikosti písmen:
h2{
   text-transform: capitalize; <-1. písmeno v každém slově je velké
}
uppercase - vše velké, lowercase - vše malé

zarovnání textu:
h1{
   text-align: center;
}
left, right, center, justify

řádkování/velikost řádku:
line-height: 14px;

CSS FLEXBOX

Základní schéma

image

Stránka se vším všudy

základní layout

image

align-self: pro jednotlivé prvky vertikálně vzhledem ke kontejneru

image

align-self: auto, flex-start, flex-end, center, baseline, stretch

má větší prioritu než zarovnání celého kontejneru

image

příklad využití na druhé straně

příklad (HTML):

image

image

SMĚRY - ZÁKLAD VŠEHO

top, bottom, right, left

diagonálně: bottom right atd.

stupně: -90deg atd.

image

spousta vlastností pojmou 1-4 parametry pro všechny 4 směry, např. margin, border. v tom případě je vyjmenováváme v pořadí

všechny 4 směry zvlášť:
[top] [right] [bottom] [left]

nebo vertikální + horizontální:
[top+bottom] [right+left]

nebo 1, jednotný:
[top+right+bottom+left]

nebo 3 - čtvrtý směr duplikuje druhý:
[top] [right+left] [bottom]

nemusí to nutně být shora po směru, např. /layout/okraje/kulaté se definují shora zleva po směru. spíše to tedy obecně znamená po směru hodinových ručiček.

pozice

w3schools

h2{
   position: absolute;
   left: 30vw;
   top: 200px;
}
bude vždy 200px a 30vw od levého horního rohu

#rozcestník{
   position: fixed;
   top: 10vh;
   left: 0;
}
scrollováním se nebude hýbat
bez některého z dalších dvou parametrů či nastavením jeho hodnoty na "auto" se prvel přizpůsobí výchozímu formátování bez atributu position

position: static;
má fixní pozici vzhledem k toku strany;

position: relative;
left: 10vw;
levý okraj posunut o 10vw vzhledem k běžné pozici objektu (pokud např. bude prvek ještě zarovnaný na střed, bude spíš vpravo)

position: sticky;
top: 3vw;
prvek je scrollovatelný, ale jakmile bude prvek 3vw od vrchnu stránky, zafixuje se jeho pozice
co jsem tak zjistil, nefunguje to, pokud je prvek v <header> v HTML. TAK POZOR!

shadow

  1. nějakého bloku/obrázku/videa...:
    box-shadow: [±x-posun] [±y-posun] [x-dosah] [y-dosah] [barva];

    box-shadow: 1vw -2vw 3vw rgba(255, 0, 0, 0.3);
    slabě červený stín s dosahem 3vw, posunutý 1vw doprava, 2vw nahoru

  2. text:
    obdobně jako u box-shadow, pouze se to jmenuje jinak- text-shadow

VLASTNOSTI FONTU

font-size: 24px, 1.25em atd. (24 pixelů, 1.25x větší než běžně)

font-weight: 100, 200, 300 atd. (tloušťka fontu)

font-style: italics, oblique (trošku víc italics)

externí fonty

https://fonts.google.com/

YT 2:38:00-2:49:15

align-content: řady prvků vzhledem k sobě a ke kontejneru

image

zarovnání

align-items: v jaké výšce jsou zarovnány v prvky v řádku/řádek vzhledem ke kontejneru (justify content pro vertikální roztažitost)

align-self: jednotlivé prvky, má přednost před align-items

justify-content: prvky v rádku vzhledem k sobě (jako ve wordu na střed, nalevo, napravo, do bloku...)

align-content: rádkování

jak vytvořit flexbox cointainer

HTML:
<div id="container123"">
   <div class="container-item123">A</div>
   <div class="container-item123">B</div>
   <div class="container-item123">C</div>
   <div class="container-item123">D</div>
</div>

#container123{
    backgound-color: rgb(245, 245, 245);
    margin: 10px;
height: 300px;
    display: flex; <-vytvoří flex container
}

display

#id123{
    display: none;
}
úplně zmizí - není vidět, nezabírá místo

display: inline-block;
např. u tabulek, které jsou defaultně bloky
image

display: inline;
je vidět rozdíl:
image

font families

  1. serif
    • mají na konci zahnuté čáry
    • používají se v tištěné podobě - např. noviny
  2. sans-serif
    • nemají tyto linky
    • používají se na webovkách
  3. monospace
    • jednotlivé znaky mají každý stejnou šířku

font-family: sans-serif;

font-family: "Times New Roman", sans-serif;
pokud je TNR dostupný font, použij ho, jinak použíj standartní sans-serif font

pořadí prvků

HTML:

<div class="container">
    <div class="container-item" style="order: 4;">A</div>
    <div class="container-item" style="order: 3;">B</div>
    <div class="container-item" style="order: 5;">C</div>
    <div class="container-item" style="order: 1;">D</div>
    <div class="container-item" style="order: 2;">E</div>
</div>

image

a flexbox prvek

.prvek{
    background-color: rgb(36, 130, 39);
    color: white;
    font-size: 25px;
    text-align: center;
    width: 70px;
    line-height: 50px;
    margin: 10px;
 

pohled z jiných zařízení

image

v levém horním rohu se dá nastavit preview pro různá zařízení

justify-content: jako text ve wordu (na střed, do bloku...)

justify-content: center/flex-start/flex-end/atd.;

flex-start @ flex-direction start

image

 

margin & padding + rozdíl?

margin="okraj"
padding="obal"

padding: 20px; <-vyrobí 20px místa okolo obrázku
margin: 20px <-udělá taky 20px místa
rozdíl: padding udělá před borderem, margin po borderu

padding-right, padding-top...udělá pouze na dané straně
margin: 100px 40px 60px 0; <-definuje všechny strany zvlášť po směru hodinových ručiček, počínaje horní stranou
margin: 50px 20px; <-definuje (top+bottom) (left+right)

Jaký je mezi nimi rozdíl? Praktický příklad: Máme tlačítko, které se při najetí na něj zvětší. Margin by zařídilo, že by to dalo vše ostatní stranou a vzniklo by volné místo, zatímco padding by zvětšilo celé tlačítko, takže kliknutí na uvolněnou část by mohlo aktivovat tlačítko.

LAYOUT

vertikální: align-items: jednotlivé prvky vzhledem ke kontejneru

align-items: center/flex-start/flex-end/atd.;

image

okraje

border: size style color;

style:

  1. dotted - tečkovaný
  2. dashed - čárkovaný
  3. solid - pevný, běžný
  4. double - dvě vrstvy 

float

HTML:

  1. obrázek  (class=right-pic)
  2. text

CSS:
.right-pic{
    float: right/left; <-funguje i pro text, tabulky atd.
}
obrázek se šoupne úplně doprava a uvolní se místo -> obsah po něm se šoupne nahoru na jeho původní místo

float: inherit;
vezme float parent elementu, taky velmi užitečné

float:none;
resetuhe formátování, které tomu bylo dáno, na defaultní

kulaté

border-radius: [jednotný poloměr];

border-radius: [vlevo nahoře] [vpravo nahoře] [vpravo dole] [vlevo dole];

border-radius: [vlevo nahoře + vpravo dole] [vpravo nahoře + vlevo dole];

border-radius: [vlevo nahoře] [vpravo nahoře + vlevo dole] [vpravo dole]