Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions src/App.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,26 @@
import React from 'react'


import s from './data.json'
import './app.css'
import Header from '../../React_Project/src/components/Header'
import Layout from '../../React_Project/src/components/Layout'
import Footer from '../../React_Project/src/components/Footer'

import PICACHU from '../../React_Project/src/assets/bg1.jpg'
import PokemonCard from './components/PokemonCard'


function App() {
const bgImg = 'https://s3.us-west-2.amazonaws.com/secure.notion-static.com/0a722b8b-d83c-42ff-9044-2019adf1ff3b/card-back-side.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20210314%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210314T135132Z&X-Amz-Expires=86400&X-Amz-Signature=baa0ce1048e79da08dbf2bbea3324237fdad78c6a47fb6ab8eadfa35453e6f3f&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22card-back-side.jpg%22'

function App() {
return (
<div className='app'>
<Header title='Something' descr='something else'/>
<Layout title='Somethin for layout' descr='somethin else for layout' urlBg={PICACHU} />
<Layout title='Somethin for layout' descr='somethin else for layout' colorBg={'red'}/>
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

а children для Layout?

<div className="flex">
{
s.map(item=><PokemonCard key={item.id} {...item} bg={bgImg}/>)
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

лучше передавать только те пропсы, который нам нужны (в уроке говорил об этом), поправь к следующему уроку))

}
</div>
<Layout title='Somethin for layout' descr='somethin else for layout' urlBg={PICACHU}/>
<Footer />
</div>
Expand Down
6 changes: 6 additions & 0 deletions src/app.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
.flex {
display: flex;
justify-content: center;
align-items: center;
flex-wrap: wrap;
}
46 changes: 46 additions & 0 deletions src/components/PokemonCard.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import React, {useState} from 'react'
import s from './pokemon.module.css'


const PokemonCard = ({name, id, type, values, img, bg }) => {
console.log(img)
const [isActive, setIsActive] = useState(true)
const handleClicked = () => {
setIsActive(!isActive)
}
return (
<div className={s.root} onClick={handleClicked} >
<div className={isActive ? `${s.pokemonCard}` : null}>
<div className={s.cardFront}>
<div className={`${s.wrap} ${s.front}`}>
<div className={s.pokemon}>
<div className={s.values}>
<div className={`${s.count} ${s.top}`}>{values.top}</div>
<div className={`${s.count} ${s.right}`}>{values.right}</div>
<div className={`${s.count} ${s.bottom}`}>{values.bottom}</div>
<div className={`${s.count} ${s.left}`}>{values.left}</div>
</div>
<div className={s.imgContainer}>
<img src={img} alt={name} />
</div>
<div className={s.info}>
<span className={s.number}>{id}</span>
<h3 className={s.name}>{name}</h3>
<small className={s.type}>Type: <span>{type}</span></small>
</div>
</div>
</div>
</div>

<div className={s.cardBack}>
<div className={`${s.wrap} ${s.back}`}>
<img src={bg} alt={name}/>
</div>
</div>

</div>
</div>
)
}

export default PokemonCard
12 changes: 1 addition & 11 deletions src/components/header.module.css
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,7 @@
z-index: 1;
}

.root::before {
content: '';
position: fixed;
background: url(https://s3.us-west-2.amazonaws.com/secure.notion-static.com/a83c9ee4-6981-4ba7-8955-4ceac8f9778f/Stars.svg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20210311%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210311T095925Z&X-Amz-Expires=86400&X-Amz-Signature=c0b1c2255bbe105809fed5ccc63b8261b764670d0a3825fa68ddc3aefea718f8&X-Amz-SignedHeaders=host&response-content-disposition=filename%20%3D%22Stars.svg%22);
background-attachment: fixed;
width: 100%;
min-height: 100vh;
z-index: -1;
animation: stars-move-in 1000ms 300ms forwards;
opacity: 0;
}


@keyframes stars-move-in {
from {
Expand Down
7 changes: 1 addition & 6 deletions src/components/layout.module.css
Original file line number Diff line number Diff line change
@@ -1,20 +1,15 @@

.root {
height: 100%;
min-height: 100vh;
font-size: 1.4rem;
position: relative;
background: #fafafa;
clip-path: polygon(0 0, 20% 5%, 100% 0, 100% 100%, 80% 95%, 0 100%);
z-index: 5;
background-attachment: fixed;
background-position: 15% 100%;
}

.root .wrapper {
padding: 15rem 10rem 12rem;
height: 100%;
min-height: 100vh;
padding: 5rem 1rem 2rem;
max-width: 1400px;
margin: 0 auto;
}
Expand Down
225 changes: 225 additions & 0 deletions src/components/pokemon.module.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,225 @@

.root {
width: 268px;
height: 388px;
margin: 16px;
perspective: 1000px;
}

.pokemonCard {
--fire: #FDDFDF;
--grass: #DEFDE0;
--electric: #FCF7DE;
--water: #DEF3FD;
--ground: #f4e7da;
--rock: #d5d5d4;
--fairy: #fceaff;
--poison: #98d7a5;
--bug: #f8d5a3;
--dragon: #97b3e6;
--psychic: #eaeda1;
--flying: #F5F5F5;
--fighting: #E6E0D4;
--normal:#F5F5F5;

width: inherit;
height: inherit;
position: relative;
transform-style: preserve-3d;
transition: .6s .1s;
transform: rotateY(180deg);
}

/* TODO: This place where we should change :hover on .active */

.pokemonCard:active {
transform: rotateY(0deg);
}


.cardFront,
.cardBack {
width: 100%;
height: 100%;
border-radius: 24px;
background: var(--normal);
position: absolute;
top: 0;
left: 0;
overflow: hidden;
backface-visibility: hidden;
display: flex;
justify-content: center;
align-items: center;
}

.cardFront {
transform: rotateY(0deg);
z-index: 2;
}

.wrap {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
}

.wrap.front {
z-index: 2;
padding: 10px;
}

.wrap.front::after {
content: '';
display: block;
width: 100%;
height: 100%;
position: absolute;
border: 12px solid #fce756;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
border-radius: 24px;
}

.wrap.back {
z-index: -1;
}

.cardBack {
transform: rotateY(180deg);
z-index: 1;
}

.cardBack img {
height: 100%;
border-radius: 24px;
}

.pokemon {
width: 100%;
height: 100%;
background-color: #eee;
border-radius: 20px;
box-shadow: 0 3px 15px rgba(100, 100, 100, 0.5);
text-align: center;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}

.fire {
background-color: var(--fire);
}
.grass {
background-color: var(--grass);
}
.electric {
background-color: var(--electric);
}
.water {
background-color: var(--water);
}
.ground {
background-color: var(--ground);
}
.rock {
background-color: var(--rock);
}
.fairy {
background-color: var(--fairy);
}
.poison {
background-color: var(--poison);
}
.bug {
background-color: var(--bug);
}
.dragon {
background-color: var(--dragon);
}
.psychic {
background-color: var(--psychic);
}
.flying {
background-color: var(--flying);
}
.fighting {
background-color: var(--fighting);
}
.normal {
background-color: var(--normal);
}

.pokemon .imgContainer {
background-color: rgba(255, 255, 255, 0.6);
border-radius: 50%;
width: 140px;
height: 140px;
text-align: center;
margin-bottom: 20px;
}

.pokemon .imgContainer img {
margin-top: 20px;
max-width: 90%;
}

.pokemon .info {
margin-top: 20px;
}

.pokemon .number {
background-color: rgba(0, 0, 0, 0.1);
border-radius: 10px;
font-size: 0.8em;
padding: 5px 10px;
}

.pokemon .name {
margin: 15px 0 7px;
letter-spacing: 1px;
}

.values {
position: absolute;
display: block;
top: 20px;
left: 20px;
font-size: 26px;
line-height: 26px;
width: 78px;
height: 78px;
}

.count{
position: absolute;
width: 30px;
height: 26px;
text-align: center;
}

.count.top {
left: 50%;
transform: translate(-50%, 0);
top: 0;
}

.count.left {
top: 26px;
left: 0;
}

.count.right {
top: 26px;
right: 0;
}

.count.bottom {
left: 50%;
transform: translate(-50%, 0);
bottom: 0;
}
Loading