0
点赞
收藏
分享

微信扫一扫

Chakra-UI——React UI 框架

眸晓 2022-03-12 阅读 94

Chakra-UI

介绍

现代化的React UI 框架 Chakra-UI

  • 内置Emotion,是CSS-IN-JS解决方案的集大成者
  • 基于 styled-systems
  • 支持开箱即用的主题功能
  • 默认支持白天、黑夜两种模式
  • 拥有大量功能丰富的且有用的组件
  • 使得响应式设计变得轻而易举
  • 文档清晰全面、查找API方便
  • 适用于用于构建展示给用户的界面
  • 框架在不断的完善

快速上手

下载 Chakra-UI

npm install @chakra-ui/react @emotion/react @emotion/styled framer-motion

克隆默认主题

  • Chakra-UI 提供的组件是建立在主题基础之上的,只有引入主题组件才能够使用其他组件
npm install @chakra-ui/theme

主题的引入

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import theme from '@chakra-ui/theme';
import { ChakraProvider, CSSReset } from "@chakra-ui/react";

ReactDOM.render(
  <ChakraProvider theme={theme}>
    <App />
  </ChakraProvider>,
  document.getElementById('root')
);

Style Props 样式属性

  • style Props 是用来更改组件样式的,通过为组件传递属性的方式实现。通过传递简化的样式属性以达到提升开发效率的目的。
  • 以下为部分展示 Style Props属性
样式属性css属性主题
m,marginmarginspace
mxmargin-left & margin-rightspace
mymargin-top& margin-bottomspace
p,paddingpaddingspace
pxpadding-left & padding-rightspace
pypadding-top & padding-bottomspace
bgbackgroundcolor
bgColorbackground-colorcolor
w,hwidth, heightsize
boxSizewidth & heightsize
ddisplaynone
pospositionnone
  • 运用
import {  Box } from '@chakra-ui/react'
function App() {
  return  <Box w={800} h={400} bgColor="hotpink"></Box>
}
export default App;

主题

颜色模式(color mode)

  • chakra-ui 提供的组件都支持两种颜色模式,浅色模式(light)和暗色模式(dark).
  • 可以通过 useColorMode 进行颜色模式的更改
import React from 'react';
import { Box, Button, useColorMode, Text } from '@chakra-ui/react'

function App() {
  const { colorMode, toggleColorMode } = useColorMode(); // 解构返回的对象
  return <Box w={800} h={400} bgColor="hotpink">
    <Text>{colorMode}</Text>
    <Button onClick={toggleColorMode} >切换颜色</Button>
  </Box>
}

export default App;
  • Chakra 将颜色模式存储在 localStorage 中,并使用类名策略来确保颜色模式是持久的

根据颜色模式设置样式

  • chakra 允许在为元素设置样式时根据颜色模式产生不同值。通过 useColorModeValue 钩子函数实现
import React from 'react';
import { Box, Button, useColorMode, Text, useColorModeValue } from '@chakra-ui/react'

function App() {
  const { colorMode, toggleColorMode } = useColorMode();
 const bgColor =useColorModeValue('pink', 'skyblue'); // 接收两个参数,浅色模式、暗色模式的色值
  return <Box w={800} h={400} bgColor={bgColor}>
    <Text>{colorMode}</Text>
    <Button onClick={toggleColorMode} >切换颜色</Button>
  </Box>
}
export default App;

强制设置组件颜色模式

  • 使组件不受颜色模式影响,始终保持在某个颜色模式下
  • LightMode 浅色模式组件,包裹的组件只显示浅色
  • DarkMode 暗色模式组件,包裹的组件只显示暗色
import {Box, Button, LightMode , DarkMode} from '@chakra-ui/react';

 return <Box w={800} h={400}>
    <Text>{colorMode}</Text>
    <LightMode>
      <Button onClick={toggleColorMode} >切换颜色</Button>
    </LightMode>
  </Box>

颜色模式通用设置

  • 设置默认颜色模式:通过 theme.config.initialColorMode 可以设置应用使用的默认主题.

  • 使用操作系统所使用的颜色模式:通过 theme.config.useSystemColorMode 可以设置将应用的颜色模式设置为操作系统所使用的颜色模式.

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import theme from '@chakra-ui/theme'
import { ChakraProvider } from "@chakra-ui/react";

// 设置默认颜色模式
// theme.config.initialColorMode = 'dark'
// 使用操作系统使用的颜色模式
theme.config.useSystemColorMode = true

ReactDOM.render(
  <ChakraProvider theme={theme}>
    <App />
  </ChakraProvider>,
  document.getElementById('root')
);

主题对象

  • 主题对象theme 下包含一些预设属性

颜色 (colors)

  • 在设置颜色时,可以但不局限于取主题中提供的颜色值
import React from 'react';
import { Box } from '@chakra-ui/react'

function App() {
  return <Box w={800} h={400} bgColor="gray.300">
    chakra ui
  </Box>
}
export default App;

间距(Space)

  • 使用 space 可以自定义项目间距。这些间距值可以由padding,margin和top,right,left,bottom 等样式引用
// 这里的预设值单位为rem,数值从0开始,以0.25rem递增,如(0:0 、 1:"0.25rem")
// mb="5" 表示 margin-bottom: 1.25rem; 
return <Box w={800} h={400} bgColor="gray.300" mb="5"> chakra ui </Box>

大小(sizes)

  • 使用 size 可以自定义元素大小,这些值可以由 width, height 和 maxWidth, minWidth 等样式引用
return <Box w="2xs" h="10" bgColor="gray.300" mb="5">chakra ui</Box>

响应式断点(Breakpoints)

  • 配置响应数组值中使用的默认断点。这些值将用于生成移动优先(即最小宽度)的媒体查询
// theme.js
export default {
  breakpoints: ["30em", "48em", "62em", "80em"] ,
};
return <Box w={["100px","200px","300px","800px"]} h="10" bgColor="gray.300" mb="5" mt="6">
    chakra ui
  </Box>

创建标准的Chakra-Ul组件

chakra-factory

  • 利用 charka方法
import { chakra } from '@chakra-ui/react';
const LGButton = chakra('button', {
  baseStyle: {

  },
})
function App() {
  return (
    <div>
     //直接以chakra.<element> 可以传递charka样式的纯html
      <chakra.button bg="red.100" px="3" py="2">chakra.button</chakra.button>

      <MyButton variant="primary" size="sm">自定义按钮</MyButton>
    </div>
  )
}
export default App;

未完待续…

举报

相关推荐

0 条评论