react 之样式的书写

react 之样式的书写

内联样式的写法

在这里插入图片描述

  • 使用内联颜色写法,对app进行添加颜色 和字体大小
    • 可以结合state的数据,动态设置样式
    • 无法使用伪类等
import React, { Component } from "react";
export default class App extends Component {
  state = {
    fontSize: 30,
  };
  render() {
    const { fontSize } = this.state;
    return (
      <div>
        <div style={{ color: "red", fontSize: fontSize + "px" }}>我是app</div>
      </div>
    );
  }
}

普通的css

  • 就是外部样式法,在外面创建一个.css 等样式文件,在引入即可
  • import “./navbar.scss”
  • 缺点:就是写的样式是全局的样式,也就是类名等会相互影响!
.nav-bar {
  display: flex;
  height: 44px;
  line-height: 44px;
  text-align: center;
}

.nav-bar .left, .nav-bar .right {
  width: 80px;
  background: red;
}

.nav-bar .center {
  flex: 1;
  background: blue;
}
  • 引入就行了
import "./navbar.scss"

styled-components 推荐写法

  • 安装:yarn add styled-components
  • 安装VScode插件提升css:vscode-styled-components
  • 作用:styled-components的本质是通过函数的调用,最终创建出一个组件
    • 这个组件会被自动添加上一个不重复的class;
    • styled-components会给该class添加相关的样式

简单的写法

在这里插入图片描述

import React, { Component } from "react";

import styled from 'styled-components';
const AppWrap = styled.div`
  color: blue;
  li {
    color: pink;
    font-size: 20px;
  }
  li:hover{
    color: yellow;
  }
`;

export default class App extends Component {
  title = ["玄幻", "武侠", "校园"];
  render() {
    const title = this.title;
    return (
      <div>
        <AppWrap >
          <div>我是测试样式的</div>
          <ul>
            {
              title.map(item => {
                return <li>
                  { item }
                </li>
              })
            }
          </ul>
        </AppWrap>
      </div>
    );
  }
}

简单写法抽离

son.jsx
import React from 'react';
// 方式1
// import styledComponents from 'styled-components';
// const SonWrap = styledComponents.div`
//   color: #eee;
//   background: pink;
// `
// 方式2
import SonWrap from './Son_css';
export default function Son(props) {
    return (
        <SonWrap>
          son
        </SonWrap>
    )
}

son_css.js
import styledComponents from 'styled-components';
 const SonWrap = styledComponents.div`
  color: #eee;
  background: pink;
`
export default SonWrap

props、attrs属性

定义一个input组件

在这里插入图片描述

import React, { Component } from "react";

import styled from 'styled-components';
// 定义一个组件 为当前组件添加css样式等 当前组件为 input组件
const XZLinput = styled.input`
  color: orange;
  &:focus{
    color: red;
  }
`

export default class App extends Component {
  render() {
    return (
      <div>
        <XZLinput  type="text" placeholder="请输入"></XZLinput>
      </div>
    );
  }
}
props可传递样式
  • props的方式传递样式
  • 读取样式:color: ${props => props.color};
    在这里插入图片描述
import React, { Component } from "react";

import styled from "styled-components";
const TestWrap = styled.div`
  color: ${props => props.color};
  font-weight: 900;
`;

  render() {
    return (
      <div>
        <TestWrap color="red">我是props</TestWrap>
      </div>
    );
  }
}
attr添加内在属性

在这里插入图片描述

import React, { Component } from "react";

import styled from "styled-components";

// 定义一个组件 为当前组件添加css样式等 当前组件为 input组件 
// attrs为当前input组件添加默认属性等!
const XZLinput = styled.input.attrs({
  placeholder: "请填写密码",
  paddingLeft: props => props.left || "5px"
})`
  padding-left: ${props => props.paddingLeft};
  color: orange;
  &:focus {
    color: red;
  }
`;

export default class App extends Component {
  render() {
    return (
      <div>
        <XZLinput type="password" left="20px"></XZLinput>
      </div>
    );
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值