Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CSS Grid Cards
Search
Manz
July 19, 2018
Programming
1.4k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CSS Grid Cards
Flexbox, Grid CSS, Position, Tranforms and others.
Manz
July 19, 2018
More Decks by Manz
See All by Manz
JSDay 2019: ApocalipCSS
manz
0
630
CSS Fútbol
manz
0
930
Conceptos detrás de Wordpress: servidores y seguridad
manz
0
230
¿Por qué debería aprender a usar la terminal de GNU/Linux?
manz
0
330
Star Workshop CSS - JSDay Canarias 2018
manz
0
220
2001KB - A Slow Odyssey (Una odisea de despacio)
manz
0
340
TLP2017: Cursos OSL / FGULL / ULL
manz
0
230
Novedades de Front-end 2016 (CSS3, HTML5 y APIs Javascript)
manz
0
270
El Club de los Developers: Back to the Future
manz
0
200
Other Decks in Programming
See All in Programming
フィードバックで育てるAI開発
kotaminato
1
120
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1.2k
技術記事、 専門家としてのプログラマ、 言語化
mizchi
14
7.5k
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
210
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
520
吝嗇家のためのAI活用 / AI development for miser - ChatGPT + Issue Driven Development
tooppoo
0
190
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
500
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
180
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
810
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
330
継続モナドとリアクティブプログラミング
yukikurage
3
620
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
1
2.7k
Featured
See All Featured
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.4k
A better future with KSS
kneath
240
18k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
550
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
WENDY [Excerpt]
tessaabrams
11
38k
Speed Design
sergeychernyshev
33
1.9k
Building Applications with DynamoDB
mza
96
7.1k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.7k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
770
Six Lessons from altMBA
skipperchong
29
4.3k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
430
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Transcript
José Román Hdez @Manz
twitter.com/manz
no , no es Preparing...
@import url('https://fonts.googleapis.com/css?family =Montserrat:600'); :root { background: green; font-family: Montserrat, sans-serif;
font-weight: 600; } Usa "po c -fo -ma an" pu ah r e s or
<div class="card"></div>
.card { width: 125px; height: 200px; background: white; border-radius: 10px;
padding: 16px 8px; margin: 5px; }
<div class="card" data-card="1" data-suit="♠"> </div> Dat E en : Met
os et e s H L
.deck for c in [1,2,3,4,5,6,7,8,9,10] .card(data-card=`${c}`, data-suit="♠") 10 ca s
un aj (de ) di l : b o k di l : in -b o k
.deck { display: flex; flex-wrap: wrap; } us f e
b mu l e (ev u s e b )
♥ ♠ ♦ ♣ :spades: U+2660 U+FE0F :hearts: U+2665 U+FE0F
:diamonds: U+2666 U+FE0F :clubs: U+2663 U+FE0F 4 suits / 4 emojis
<div class="card" data-card="2" data-suit="♠"> <span class="item">♠</span> <span class="item">♠</span> </div> .ca
♠ ♠ .it .it
10 cards [1...10] 3 cards [J,Q,K] 52 cards
.deck for s in ['♠','♥','♦','♣'] for c in [1,2,3,4,5,6,7,8,9,10] .card(data-card=`${c}`,
data-suit=`${s}`) for i in [...Array(c).keys()] span.item= s 10 ca s un aj (de ) 4 pa en ca , c e núme de ím o s re n e t ♠ ♠♠ ♠♠♠ ♠♠♠♠ ♠♠♠♠♠ ♠♠♠♠♠♠ ♠♠♠♠♠♠♠ ♠♠♠♠♠♠♠♠ ♠♠♠♠♠♠♠♠♠ ♠♠♠♠♠♠♠♠♠♠
.card { font-size: 52px; } [data-suit="♥"], [data-suit="♦"] { color: red;
} ♠ ♥ ♦ ♣
f e b , g i & po on Dealing...
[data-card="1"] { display: flex; justify-content: center; align-items: center; font-size: 92px;
} ju f -co n al -it ♠
[data-card="2"], [data-card="3"] { display: flex; flex-direction: column; justify-content: center; align-items:
center; } ♠ f e -di t o : ro f e -di t o : co n ♠
[data-card="4"] { display: grid; grid-template-rows: 50% 50%; grid-template-columns: 50% 50%;
justify-items: center; align-items: center; } ♠ te l -co n te l -ro ♠ ♠ ♠ 50% 50% 50% 50%
[data-card="5"] { display: grid; grid-template-areas: "a . b" ". c
." "d . e"; justify-items: center; align-items: center; & .item:nth-child(1) { grid-area: a; } ... } ♠ áre áre ♠ ♠ ♠ @use postcss-nested; áre áre ♠ áre Hay om r la 5 áre
[data-card="6"], [data-card="7"], [data-card="8"] { display: grid; grid-template-rows: repeat(3,1fr); grid-template-columns: repeat(2,1fr);
justify-items: center; align-items: center; } ♠ ♠ ♠ ♠ 1f 1f 1f ♠ ♠ 1f 1f 1f 1f 1f 2f 3f
[data-card="7"], [data-card="8"] { position: relative; & .item:nth-child(1) { position: absolute;
top: 20%; } } ♠ ♠ ♠ ♠ ♠ ♠♠ ♠ re ve ab te to 20%
[data-card="8"] { & .item:nth-child(8) { position: absolute; bottom: 20%; }
} ♠ ♠ ♠ ♠ ♠ ♠♠ ♠ ♠ bo m 20%
[data-card="9"], [data-card="10"] { display: grid; grid-template-rows: repeat(4, 25%); grid-template-columns: 50%
50%; justify-items: center; align-items: center; position: relative; & .item:nth-child(1) { position: absolute; } } ♠ ♠ ♠ ♠ ♠ ♠ ♠ ♠♠ 50% 50% 25% 25% 25% 25% ab te
[data-card="10"] { position: relative; & .item:nth-child(1) { position: absolute; top:
15%; } & .item:nth-child(10) { position: absolute; bottom: 15%; } } ♠ ♠ ♠ ♠ ♠ ♠ ♠ ♠♠ ♠ bo m ♠ to
c t a s m mirror / mirror
[data-card="5"] .item:nth-child(n+4) { ... } :n -c i d n+4
1 2 3 4 5 de r o m en an
[data-card="2"] .item:nth-child(n+2), [data-card="3"] .item:nth-child(n+3), [data-card="4"] .item:nth-child(n+3), [data-card="5"] .item:nth-child(n+4), [data-card="6"] .item:nth-child(n+5),
[data-card="7"] .item:nth-child(n+6), [data-card="8"] .item:nth-child(n+6), [data-card="9"] .item:nth-child(n+6), [data-card="10"] .item:nth-child(n+6) { transform: translateY(8px) scaleY(-1); } s a Y -1 ♠ ♠
f e b Jack, Queen & King...
... for c in [1,2,3,4,5,6,7,8,9,10] ... for c in ['J','Q','K']
.card(data-card=`${c}`, data-suit=`${s}`) span.item= c+s Jac , Qu n & Kin la ra + el J♠ Q♠ K♠
[data-card="J"], [data-card="Q"], [data-card="K"] { display: flex; justify-content: center; align-items: center;
& .item { border: 1px solid #ccc; border-radius: 10px; padding: 30px 12px; } } J♠ al -it ju f -co n
c co n ne d Check cards...
[data-card] { position: relative; &::before { content: 'Manz'; font-size: 17px;
position: absolute; } } c co n ne d re ve ♠ ♠ Manz
[data-card] { position: relative; &::before, &::after { content: 'Manz'; font-size:
17px; position: absolute; } &::before { top: 0; left: 0; } } ::af ::be ♠ Manz Manz es a s i r-iz am ♠
[data-card] { position: relative; &::before, &::after { content: 'Manz'; font-size:
17px; position: absolute; } &::before { top: 0; left: 0; } &::after { bottom: 0; right: 0; } } Manz ♠ Manz ::be ::af es a s i r-iz es a n i r-de h ♠
[data-card] { position: relative; &::before, &::after { content: attr(data-card) attr(data-suit);
font-size: 17px; position: absolute; } &::before { top: 4px; left: 4px; } &::after { bottom: 4px; right: 4px; } } ♠ 2♠ 2♠ núme + pa (me to ) to 4p le 4p bo m4p ri t 4p ♠
None
c me u r e Connect from phone...
@media screen and (max-width:800px){ .card::after, .item { display: none; }
} ♠ ♠ 2♠ 2♠ sólo n a l < 800p oc mo oc mo
@media screen and (max-width:800px){ ... .card { width: 38px; height:
48px; display: flex; justify-content: center; align-items: center; } .card::before { position: static; font-size: 24px; } } 2♠ re n i mo
None
ho n li r Waiting for player...
.card:hover { box-shadow: 2px 8px 10px rgba(0,0,0, 0.5); transform: translate(-1px,
-6px); transition: transform 0.2s ease; will-change: transform; user-select: none; cursor: pointer; } ♠ 2♠ 2♠ ♠ ♠ 2♠ 2♠ ♠ 1p 6p
.card.flipped { background: repeating-linear-gradient(45deg, #11f 10%, #44f 22%); radial-gradient(#f23 80%,
#a12 64%); conic-gradient(red,yellow,lime, aqua,blue,magenta,red); & *, &::before, &::after { display: none; } } ♠ 2♠ 2♠ ♠ 1 1 2 3 2 3
Drag & Drop...
document.querySelectorAll('.card').forEach(e => { e.classList.add('flipped'); e.addEventListener('dblclick', c => c.currentTarget.classList.toggle('flipped')); e.addEventListener('wheel', c
=> c.currentTarget.style.transform = `rotate(${c.deltaY / 10}deg)`); displacejs(e); });
None
None
¡Gracias! José Román Hdez @Manz