美文网首页
09.项目实战:Header组件开发(一)

09.项目实战:Header组件开发(一)

作者: 小二的学习日记 | 来源:发表于2020-07-18 11:10 被阅读0次

    项目目录搭建,Styled-Components与Reset.css的结合使用

    从今天开始,我们要写一个实战项目
    1.创建项目。

    create-react-app jianshu 
    

    2.删掉项目中没用的东西,使项目到最简状态。
    3.现在有个问题是,如果我们在项目的src/index.js文件中,导入了css样式,那么他的作用范围是所有组件。我们想实现的是,导入的css文件,针对性的对某一个组件生效,该怎么办呢?
    导入styled-components
    npm install --save styled-components
    4.编写style.js样式文件。使用styled-components模块中的createGlobalStyle,生命全局样式。全局样式使用的是resetCss,这个样式文件可以做到,在不同浏览器渲染css页面,效果统一。

    //===>src/App.js
    import React from 'react';
    
    function App() {
      return (
        <div className="App">
         Hello World
        </div>
      );
    }
    
    export default App;
    
    //===>src/index.js
    import React from 'react';
    import ReactDOM from 'react-dom';
    import App from './App';
    import './style.js'
    
    ReactDOM.render(
      <App />,
      document.getElementById('root')
    );
    
    //===>src/style.js
    import { createGlobalStyle } from 'styled-components'
    
    createGlobalStyle`
    /* http://meyerweb.com/eric/tools/css/reset/ 
       v2.0 | 20110126
       License: none (public domain)
    */
    
    html, body, div, span, applet, object, iframe,
    h1, h2, h3, h4, h5, h6, p, blockquote, pre,
    a, abbr, acronym, address, big, cite, code,
    del, dfn, em, img, ins, kbd, q, s, samp,
    small, strike, strong, sub, sup, tt, var,
    b, u, i, center,
    dl, dt, dd, ol, ul, li,
    fieldset, form, label, legend,
    table, caption, tbody, tfoot, thead, tr, th, td,
    article, aside, canvas, details, embed, 
    figure, figcaption, footer, header, hgroup, 
    menu, nav, output, ruby, section, summary,
    time, mark, audio, video {
        margin: 0;
        padding: 0;
        border: 0;
        font-size: 100%;
        font: inherit;
        vertical-align: baseline;
    }
    /* HTML5 display-role reset for older browsers */
    article, aside, details, figcaption, figure, 
    footer, header, hgroup, menu, nav, section {
        display: block;
    }
    body {
        line-height: 1;
    }
    ol, ul {
        list-style: none;
    }
    blockquote, q {
        quotes: none;
    }
    blockquote:before, blockquote:after,
    q:before, q:after {
        content: '';
        content: none;
    }
    table {
        border-collapse: collapse;
        border-spacing: 0;
    }
    
    效果

    使用styled-components完成Header组件布局

    现在我们来做简书的Header部分
    准备工作:
    1.从简书官网把Logo下载下来,放到src/statics/logo.png

    logo.png
    编码:
    1.先在App组件中引入Header
    //===>src/App.js
    import React from 'react';
    import Header from './common/header'
    
    function App() {
      return (
        <Header />
      );
    }
    
    export default App;
    

    2.编写Header组件

    //===>src/common/header/index.js
    import React, { Component } from 'react'
    import {
        HeaderWrapper,
        Logo,
        Nav,
        NavItem,
        NavSearch,
        Addition,
        Button
    } from './style'
    
    class Header extends Component {
        render() {
            return (
                <HeaderWrapper>
                    <Logo />
                    <Nav>
                        <NavItem className='left'>首页</NavItem>
                        <NavItem className='left'>下载App</NavItem>
                        <NavItem className='right'>登录</NavItem>
                        <NavItem className='right'>Aa</NavItem>
                        <NavSearch></NavSearch>
                        <Addition>
                            <Button className='writting'>写文章</Button>
                            <Button className='reg'>注册</Button>
                        </Addition>
                    </Nav>
                </HeaderWrapper>
            )
        }
    }
    
    export default Header
    

    3.我们发现,Header中的好多组件都没有被定义,那我们用styled-components这个第三方模块来定义一下
    export const HeaderWrapper = styled.div`...`指的是HeaderWrapper组件是个div,他带有里面定义的css样式。
    静态资源的路径要用类似import logoPic from '../../statics/logo.png'
    这种方法声明,然后background:url(${logoPic});这样变量引入。

    &.active {
    color:#ea6f5a;
    }这个语法的意思是,className='active'特有的css样式。

    ...attrs({...})用来写标签的属性。

    //===>src/common/header/style.js
    import styled from 'styled-components'
    import logoPic from '../../statics/logo.png'
    
    export const HeaderWrapper = styled.div`
    position:relative;
    height:56px;
    border-bottom:1px solid #f0f0f0;
    `
    
    export const Logo = styled.a.attrs({
        href: '/'
    })`
    position:absolute;
    top:0;
    left:0;
    display:block;
    width:100px;
    height:56px;
    background:url(${logoPic});
    background-size:contain;
    `
    
    export const Nav = styled.div`
    width:960px;
    height:100%;
    padding-right:70px;
    box-sizing:border-box;
    margin:0 auto;
    `
    
    export const NavItem = styled.div`
    line-height:56px;
    padding:0 15px;
    font-size:17px;
    color:#333;
    &.left{
        float:left;
    }
    &.right{
        float:right;
        color:#969696;
    }
    &.active {
        color:#ea6f5a;
    }
    `
    
    export const NavSearch = styled.input.attrs({
        placeholder: '搜索'
    })`
    width:160px;
    height:38px;
    padding:0 20px;
    margin-top:9px;
    margin-left:20px;
    box-sizing:border-box;
    border:none;
    outline:none;
    border-radius:19px;
    background:#eee;
    font-size:14px;
    &::placeholder{
        color:#999;
    }
    `
    
    export const Addition = styled.div`
    position:absolute;
    right:0;
    top:0;
    height:56px;
    `
    
    export const Button = styled.div`
    float:right;
    margin-top:9px;
    margin-right:20px;
    padding:0 20px;
    line-height:38px;
    border-radius:19px;
    border:1px solid #ec6149;
    font-size:14px;
    &.reg{
        color:#ec6149;
    }
    &.writting{
        color:#fff;
        background:#ec6149;
    }
    `
    
    image.png

    相关文章

      网友评论

          本文标题:09.项目实战:Header组件开发(一)

          本文链接:https://www.haomeiwen.com/subject/ufsghktx.html