|
@@ -1,211 +1,108 @@
|
|
|
-/* проба отправить с уведомлением*/
|
|
|
-
|
|
|
import logo from './logo.svg';
|
|
|
+import {useState} from 'react';
|
|
|
import './App.css';
|
|
|
-const ProjectInfo=()=>
|
|
|
-<li className="project-item">
|
|
|
-<div className="project-data">
|
|
|
- <div><img className="project-img" src="img/proj.png" alt="img" /></div>
|
|
|
- <div className="project-txt">
|
|
|
- <p>40+</p>
|
|
|
- <p>проектов</p>
|
|
|
- </div>
|
|
|
-</div>
|
|
|
-</li>
|
|
|
-const Projects = () =>
|
|
|
-<div className="projects">
|
|
|
- <ul className="projects-list">
|
|
|
- <ProjectInfo />
|
|
|
- <ProjectInfo />
|
|
|
- <ProjectInfo />
|
|
|
- <ProjectInfo />
|
|
|
- <ProjectInfo />
|
|
|
- <ProjectInfo />
|
|
|
- </ul>
|
|
|
+
|
|
|
+const Logo = () => {
|
|
|
+ return <>
|
|
|
+ <span style={{color: Math.random() > 0.5 ? 'red' : 'green'}}>TEXT</span>
|
|
|
+ <img src={logo} alt="logo" className="App-logo"/>
|
|
|
+ </>
|
|
|
+}
|
|
|
+
|
|
|
+const NavItem = ({text, url}) =>
|
|
|
+ <li><a href={url}>{text.toUpperCase() + Math.random()}</a></li>
|
|
|
+
|
|
|
+const Nav = () =>
|
|
|
+<ul>
|
|
|
+ <NavItem url="/" text="Главная"/>
|
|
|
+ <NavItem url="/aboutus" text="О нас" />
|
|
|
+ <NavItem url="/contacts" text="Контакты" />
|
|
|
+</ul>
|
|
|
+
|
|
|
+const GoodCard = ({title='NoName',
|
|
|
+ url='#',
|
|
|
+ img='https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png',
|
|
|
+ children}) => //title, url - объявление переменных. После `=` - значение по умолчанию
|
|
|
+<div className='GoodCard'>
|
|
|
+ <h2>{title}</h2>
|
|
|
+ <a href={url}>
|
|
|
+ <img src={img} />
|
|
|
+ </a>
|
|
|
+ <p>
|
|
|
+ {children}
|
|
|
+ </p>
|
|
|
</div>
|
|
|
-const NavItem = ({text1}) =>
|
|
|
-<li className="nav-item">
|
|
|
-<a href="#" className="nav-link">{text1}</a>
|
|
|
-</li>
|
|
|
|
|
|
-function App() {
|
|
|
- return (
|
|
|
- <div>
|
|
|
- <header className="header-topx">
|
|
|
- <div className="container-top">
|
|
|
- <div className="header-wrap-top">
|
|
|
- <a href="#" className="logo-top">
|
|
|
- <img src="img/wd.png" alt="logo" />
|
|
|
- </a>
|
|
|
- <nav className="nav">
|
|
|
- <label className="opener" htmlFor="burger">
|
|
|
- <span></span>
|
|
|
- </label>
|
|
|
- <input className="burger" type="checkbox" name="" id="burger" title="#" />
|
|
|
- <ul className="nav-list">
|
|
|
- <NavItem text1="ГЛАВНАЯ" />
|
|
|
- <NavItem text1="ОБ АВТОРЕ" />
|
|
|
- <NavItem text1="РАБОТЫ" />
|
|
|
- <NavItem text1="ПРОЦЕСС" />
|
|
|
- <NavItem text1="КОНТАКТЫ" />
|
|
|
- </ul>
|
|
|
- </nav>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div className="banner">
|
|
|
- <div className="banner-img">
|
|
|
- <img src="img/frame.png" alt="img" />
|
|
|
- </div>
|
|
|
- <div className="banner-text">
|
|
|
- <h2>Дизайн и верстка</h2>
|
|
|
- <p>Lorem Ipsum - это текст-"рыба", часто используемый в печати и вэб-дизайне.
|
|
|
- Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI
|
|
|
- века.</p>
|
|
|
- <div><button className="banner-btn">НАПИСАТЬ МНЕ</button> </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </header>
|
|
|
- <div className="about">
|
|
|
- <h2>Обо мне</h2>
|
|
|
- <p>Lorem Ipsum - это текст-"рыба", часто используемый в печати и вэб-дизайне.
|
|
|
- Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI
|
|
|
- века.</p>
|
|
|
- </div>
|
|
|
- <Projects />
|
|
|
- <div className="wrapper">
|
|
|
+const Header = () =>
|
|
|
+<header className="App-header">
|
|
|
+ <Logo />
|
|
|
+ <Nav></Nav>
|
|
|
+</header>
|
|
|
+
|
|
|
+const Content = () =>
|
|
|
+<>
|
|
|
+ <GoodCard title='Пиво'
|
|
|
+ url="https://ru.wikipedia.org/wiki/%D0%9F%D0%B8%D0%B2%D0%BE"
|
|
|
+ img="https://m.dom-eda.com/uploads/images/catalog/item/cbb4387631/07042d6ed6_1000.jpg">
|
|
|
+ пей пиво <strong>пенное</strong> и все такое
|
|
|
+ </GoodCard>
|
|
|
|
|
|
- <header className="header">
|
|
|
- <div className="container">
|
|
|
- <div className="header-wrap">
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </header>
|
|
|
- <main className="main">
|
|
|
- <section className="section-skills">
|
|
|
- <div className="container">
|
|
|
- <div className="row">
|
|
|
- <div className="col">
|
|
|
- <div className="skill-holder">
|
|
|
- <header className="section-header">
|
|
|
- <h1 className="section-title">Мои
|
|
|
- навыки</h1>
|
|
|
- </header>
|
|
|
- <div className="skill-list">
|
|
|
- <div className="skill-item">
|
|
|
- <span className="skill-title">Adobe
|
|
|
- Photoshop</span>
|
|
|
- <div className="skill-loader">
|
|
|
- <div className="skill-load"
|
|
|
- style={{width: "80%" }}>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div className="skill-item">
|
|
|
- <span className="skill-title">Adobe
|
|
|
- Photoshop</span>
|
|
|
- <div className="skill-loader">
|
|
|
- <div className="skill-load"
|
|
|
- style={{width: "90%"}}>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div className="skill-item">
|
|
|
- <span className="skill-title">Adobe
|
|
|
- Photoshop</span>
|
|
|
- <div className="skill-loader">
|
|
|
- <div className="skill-load"
|
|
|
- style={{width: "60%"}}>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div className="col">
|
|
|
- <div className="col-img"
|
|
|
- style={{ backgroundImage: "url(img/img.png)" }}>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </section>
|
|
|
- <section className="my-work">
|
|
|
- <div className="my-work-text">
|
|
|
- <h2>Как я работаю</h2>
|
|
|
- <p>Lorem Ipsum - это текст-"рыба", часто используемый в печати и
|
|
|
- вэб-дизайне.
|
|
|
- Lorem Ipsum является стандартной "рыбой" для текстов на
|
|
|
- латинице с
|
|
|
- начала XVI века.</p>
|
|
|
- </div>
|
|
|
- <div className="my-work-video">
|
|
|
- <img className="video-main" src="img/video.png" alt="my-work-video" />
|
|
|
- <img src="img\button.png" alt="play button" className="button-play" />
|
|
|
- </div>
|
|
|
- </section>
|
|
|
- <section className="section-gallery">
|
|
|
- <div className="gallery-list">
|
|
|
- <a href="#" className="gallery-item"
|
|
|
- style={{backgroundImage: "url(img/pic1.png)"}} alt="img"></a>
|
|
|
- <a href="#" className="gallery-item"
|
|
|
- style={{backgroundImage: "url(img/pic2.png)"}} alt="img"></a>
|
|
|
- <a href="#" className="gallery-item"
|
|
|
- style={{backgroundImage: "url(img/pic1.png)"}} alt="img"></a>
|
|
|
- <a href="#" className="gallery-item"
|
|
|
- style={{backgroundImage: "url(img/pic2.png)"}} alt="img"></a>
|
|
|
- <a href="#" className="gallery-item"
|
|
|
- style={{backgroundImage: "url(img/pic2.png)"}} alt="img"></a>
|
|
|
- <a href="#" className="gallery-item"
|
|
|
- style={{backgroundImage: "url(img/pic1.png)"}} alt="img"></a>
|
|
|
- <a href="#" className="gallery-item"
|
|
|
- style={{backgroundImage: "url(img/pic2.png)"}} alt="img"></a>
|
|
|
- <a href="#" className="gallery-item"
|
|
|
- style={{backgroundImage: "url(img/pic1.png)"}} alt="img"></a>
|
|
|
- </div>
|
|
|
- </section>
|
|
|
- <section className="clients">
|
|
|
- <img className="client-logo" src="img\microsoft.png" alt="logo client" />
|
|
|
- <img className="client-logo" src="img\microsoft.png" alt="logo client" />
|
|
|
- <img className="client-logo" src="img\microsoft.png" alt="logo client" />
|
|
|
- <img className="client-logo" src="img\microsoft.png" alt="logo client" />
|
|
|
- </section>
|
|
|
- <section className="client-form">
|
|
|
- <div className="form-wrapper">
|
|
|
- <h2 style={{paddingTop:"50px"}}>Хотите веб-сайт?</h2>
|
|
|
- <p>Lorem Ipsum - это текст-"рыба", часто используемый в печати и
|
|
|
- вэб-дизайне.
|
|
|
- Lorem Ipsum является стандартной "рыбой" для текстов на латинице
|
|
|
- с начала XVI
|
|
|
- века.</p>
|
|
|
- <div className="form table">
|
|
|
- <div className="form-name">
|
|
|
- <input className="form-name1" placeholder="Ваше имя" size="25" />
|
|
|
- <input className="form-name2" placeholder="Ваш e-mail" size="25" />
|
|
|
- <textarea className="form-message" placeholder="Сообщение" rows="8"
|
|
|
- cols="62"></textarea>
|
|
|
- <button className="button-form">ОТПРАВИТЬ</button>
|
|
|
+ <GoodCard title="ЕстьName" children="задаю children как атрибут"/>
|
|
|
+ <GoodCard title="ЕстьName">
|
|
|
+ задаю children как атрибут
|
|
|
+ </GoodCard>
|
|
|
+</>
|
|
|
|
|
|
+const Counter = () => {
|
|
|
+ const [counter, setCounter] = useState(1)
|
|
|
+ console.log('ПЕРЕЗАПУСК КОМПОНЕНТА', counter)
|
|
|
+ return (
|
|
|
+ <button style={{fontSize: `${counter/10}em`}}
|
|
|
+ onClick={() => setCounter(counter +1)}>{counter}</button>
|
|
|
+ )
|
|
|
+}
|
|
|
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+const Input = () => {
|
|
|
+ const [text, setText] = useState('')
|
|
|
+ console.log('ИНПУТ ПЕРЕЗАПУСТИЛСЯ', text)
|
|
|
+ return (
|
|
|
+ <div>
|
|
|
+ <input value={text}
|
|
|
+ onChange={e => setText(e.target.value)}
|
|
|
+ type="text"/>
|
|
|
+ <ShowFun text={text} onReset={() => setText('')}/>
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+}
|
|
|
|
|
|
- </div>
|
|
|
- </section>
|
|
|
- </main>
|
|
|
- <footer className="footer">
|
|
|
- <div className="sign">
|
|
|
- <h3>Иванов Иван</h3>
|
|
|
- <p>(с) 2018.Все права защищены.</p>
|
|
|
- </div>
|
|
|
- <div className="vk">
|
|
|
- <img src="img/VK.png" alt="img" />
|
|
|
- <img className="vk-i" src="img/VK.png" alt="img" />
|
|
|
- <img src="img/VK.png" alt="img" />
|
|
|
- </div>
|
|
|
+const ShowFun = ({text, onReset}) =>
|
|
|
+ <div style={{color: text.length > 10 ? 'red': 'green'}}
|
|
|
+ onClick={onReset}>
|
|
|
+ {text}
|
|
|
+ </div>
|
|
|
|
|
|
+const LoginForm = ({onLogin}) => {
|
|
|
+ //придумать пару стейтов для двух инпутов
|
|
|
+ //сделать так, что бы кнопка была disabled когда login или пароль
|
|
|
+ //слишком короткие
|
|
|
+ //запустить onLogin по клику
|
|
|
+ return (
|
|
|
+ <div>
|
|
|
+ <input placeholder='Login'/>
|
|
|
+ <input placeholder='Password'/>
|
|
|
+ <button>Login...</button>
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+}
|
|
|
|
|
|
- </footer>
|
|
|
- </div>
|
|
|
+function App() {
|
|
|
+ return (
|
|
|
+ <div className="App">
|
|
|
+ <LoginForm onLogin={({login, password}) => console.log('ЛОГИН И ПАРОЛЬ', login, password)}/>
|
|
|
+ <Input/>
|
|
|
+ <Input/>
|
|
|
+ <Counter />
|
|
|
+ <Counter />
|
|
|
</div>
|
|
|
);
|
|
|
}
|