Chakra-UI组件库介绍

这篇具有很好参考价值的文章主要介绍了Chakra-UI组件库介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Chakra-UI是一个现代化React UI框架。它是用来构建用户界面的。

Chakra-UI是一个简单的、模块化的易于理解的UI组件库。提供了丰富的构建React应用所需的UI组件。

其优点有下面几点:

  1. Chakra Ul 内置 Emotion,是 CSS-IN-JS 解决方案的集大成者

  1. 基于 Styled-Systems https://styled-system.com/

  1. 支持开箱即用的主题功能

  1. 默认支持白天和黑夜两种模式

  1. 拥有大量功能丰富且非常有用的组件

  1. 使响应式设计变得轻而易举

  1. 文档清晰而全面.查找API更加容易

  1. 适用于构建用于展示的给用户的界面

  1. 框架正在变得越来越完善

  1. 下载Chakra-UI库和Chakra-UI的主题

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

chakra-ui提供的组件是建立在主题基础上的,只有先引入了主题组件才能够使用其他组件。

参考官网链接:Chakra-UI

2. 引入主题

import { ChakraProvider, CSSReset, Button } from '@chakra-ui/react'
import chakraTheme from '@chakra-ui/theme'

3. 引入Chakra-UI重置组件CSSReset

function App () {
  return (
    <ChakraProvider theme={chakraTheme}>
      <CSSReset />
      <Button>按钮</Button>
    </ChakraProvider>
  )
}

4. Style Props 样式属性

style props 使用来更改组件样式的,通过为组件传递属性的方式实现。通过传递简化的样式属性以达到提升开发效率的目的。详见:STYLED SYSTEM

Chakra-UI组件库介绍,react没入门就放弃,ui,前端,react.js,css,javascript,Powered by 金山文档

Prop

CSS Property

Theme Key

m, margin

margin

space

mt, marginTop

margin-top

space

mr, marginRight

margin-right

space

me, marginEnd

margin-inline-end

space

mb, marginBottom

margin-bottom

space

ml, marginLeft

margin-left

space

ms, marginStart

margin-inline-start

space

mx, marginX

margin-inline-start + margin-inline-end

space

my, marginY

margin-top + margin-bottom

space

p, padding

padding

space

pt, paddingTop

padding-top

space

pr, paddingRight

padding-right

space

pe, paddingEnd

padding-inline-end

space

pb, paddingBottom

padding-bottom

space

pl, paddingLeft

padding-left

space

ps, paddingStart

padding-inline-start

space

px, paddingX

padding-inline-start + padding-inline-end

space

py, paddingY

padding-top + padding-bottom

space

Prop

CSS Property

Theme Key

color

color

colors

bg, background

background

colors

bgColor

background-color

colors

opacity

opacity

none

Prop

CSS Property

Theme Key

bgGradient

background-image

none

bgClip, backgroundClip

background-clip

none

Prop

CSS Property

Theme Key

fontFamily

font-family

fonts

fontSize

font-size

fontSizes

fontWeight

font-weight

fontWeights

lineHeight

line-height

lineHeights

letterSpacing

letter-spacing

letterSpacings

textAlign

text-align

none

fontStyle

font-style

none

textTransform

text-transform

none

textDecoration

text-decoration

none

Prop

CSS Property

Theme Key

w, width

width

sizes

h, height

height

sizes

minW, minWidth

min-width

sizes

maxW, maxWidth

max-width

sizes

minH, minHeight

min-height

sizes

maxH, maxHeight

max-height

sizes

d, display

display

none

boxSize

width, height

sizes

verticalAlign

vertical-align

none

overflow

overflow

none

overflowX

overflowX

none

overflowY

overflowY

none

Chakra-UI组件库介绍,react没入门就放弃,ui,前端,react.js,css,javascript,Powered by 金山文档
For mx and px props, we use margin-inline-start and margin-inline-end to ensure the generated styles are RTL-friendly
import { Box } from '@chakra-ui/react'

<Box w='200px' h='100px' bgColor='tomato'></Box>

box组件最终会被解析成div元素。

<div class="css-23s0yc"></div>

5. 主题的颜色模式(color mode)

5.1 实现暗色和浅色两种模式的切换

支持两种模式:深色模式(dark)和浅色模式(light);

可以通过useColorMode进行颜色模式更改。

import { useColorMode, Button, Text } from '@chakra-ui/react'

const { colorMode, toggleColorMode } = useColorMode()
console.log(colorMode, toggleColorMode)

<Text>当前的颜色模式为 {colorMode}</Text>
<Button onClick={toggleColorMode}>切换颜色模式</Button>

这一操作对颜色模式的改变可以被持久化,刷新不会丢失。因为chakra将颜色模式存储在了localStorage中,并使用类名策略来确保颜色模式是持久的。每次刷新页面的时候它都会先去localStorage中取这个颜色模式的值,然后再去应用这个值。

注意:当我们做主题颜色模式的切换的时候,内部大的chakra组件也会相应的做颜色模式的切换。

5.2 根据颜色模式设置样式(useColorModeValue钩子函数)

chakra 允许在为元素设置样式的时候根据颜色模式产生不同值,通过 useColorModeValue钩子函数实现。

import {
  Box,
  useColorModeValue,
  useColorMode,
  Button,
  Text
} from '@chakra-ui/react'

const { colorMode, toggleColorMode } = useColorMode()

const bgColor = useColorModeValue('tomato'/*lightModeValue*/, 'skyblue'/*darkModeValue*/)

<Box w='200px' h='100px' bgColor={bgColor}></Box>
<Text>当前的颜色模式为 {colorMode}</Text>
<Button onClick={toggleColorMode}>切换颜色模式</Button>

5.3 强制组件的颜色模式

使组件不受颜色模式的影响,始终保持在某个颜色模式下的样式。

import {
  Box,
  useColorModeValue,
  useColorMode,
  Button,
  Text,
  LightMode,
  DarkMode
} from '@chakra-ui/react'

<LightMode>
    <Text>强制颜色模式为 light</Text>
</LightMode>
<DarkMode>
    <Text>当前的颜色模式为 dark</Text>
</DarkMode>
<Button onClick={toggleColorMode}>切换颜色模式</Button>

5.4 颜色模式通用设置

  • 设置默认颜色模式

通过 theme.config.initialColorMode 可以设置应用使用的默认主题。

  • 使用操作系统所使用的颜色模式

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

值得注意的是,当theme.config.useSystemColorMode设置为true值时,页面刷新时会优先以系统默认颜色模式为准,localStorage中存储的颜色模式值此时会被忽略。

import theme from '@chakra-ui/theme'

// 1.设置默认颜色模式 为 dark
theme.config.initialColorMode = 'dark';

// 2.使用操作系统所使用的颜色模式 值为:boolean
theme.config.useSystemColorMode = true;
Chakra-UI组件库介绍,react没入门就放弃,ui,前端,react.js,css,javascript,Powered by 金山文档
Chakra-UI组件库介绍,react没入门就放弃,ui,前端,react.js,css,javascript,Powered by 金山文档

6. 主题对象

6.1 颜色Colors

在chakra的主题当中,给我们预定义了一些常见颜色值。

在设置颜色时,可以但不限于取主题当中提供的颜色值。

参考:Colors#

  • Colors

  • Black & White

  • Alphas

  • Gray

  • Red

  • Orange

  • Yellow

  • Green

  • Teal

  • Blue

  • Cyan

  • Purple

  • Pink

6.2 间距 Space

使用 space 可以定义项目间距。这些间距值可以由padding,margin,和 top、left、right、bottom 样式引用。

Name

Space

Pixels

px

1px

1px

0.5

0.125rem

2px

1

0.25rem

4px

1.5

0.375rem

6px

2

0.5rem

8px

2.5

0.625rem

10px

3

0.75rem

12px

3.5

0.875rem

14px

4

1rem

16px

5

1.25rem

20px

6

1.5rem

24px

7

1.75rem

28px

8

2rem

32px

9

2.25rem

36px

10

2.5rem

40px

12

3rem

48px

14

3.5rem

56px

16

4rem

64px

20

5rem

80px

24

6rem

96px

28

7rem

112px

32

8rem

128px

36

9rem

144px

40

10rem

160px

44

11rem

176px

48

12rem

192px

56

14rem

224px

60

15rem

240px

64

16rem

256px

72

18rem

288px

80

20rem

320px

96

24rem

384px

6.3 宽度大小 Sizes

使用size可以自定义元素大小,这些值可以由width, height, maxWidth, minWidth, maxHeight, minHeight等样式引用。

import { extendTheme } from '@chakra-ui/react'

const sizes = {
  sizes: {
    ...theme.space,
    max: 'max-content',
    min: 'min-content',
    full: '100%',
    '3xs': '14rem',
    '2xs': '16rem',
    xs: '20rem',
    sm: '24rem',
    md: '28rem',
    lg: '32rem',
    xl: '36rem',
    '2xl': '42rem',
    '3xl': '48rem',
    '4xl': '56rem',
    '5xl': '64rem',
    '6xl': '72rem',
    '7xl': '80rem',
    '8xl': '90rem',
    container: {
      sm: '640px',
      md: '768px',
      lg: '1024px',
      xl: '1280px',
    },
  },
}

const theme = extendTheme({ sizes, ...})

6.4 断点 Breakpoints

响应式数组值中使用的默认断点,这些值将用于生成移动优先(即最小宽度)的媒体查询。

breakpoints:

  • 2xl: "96em"

  • base: "0em"

  • lg: "62em"

  • md: "48em"

  • sm: "30em"

  • xl: "80em"

6.5 其他主题对象

Chakra-UI组件库介绍,react没入门就放弃,ui,前端,react.js,css,javascript,Powered by 金山文档

以上这些对象大同小异,都是一些分别这对某些内容的预设样式值。当我们需要的时候再去查阅资料按需使用即可。

7. 创建标准的chakra-ui组件

chakra-ui 也为我们提供了一种创建标准chakra UI 组件的方法。

import { chakra } from "@chakra-ui/react"
<chakra.button
  px='3'
  py='2'
  bg='green.200'
  rounded='md'
  _hover={{ bg: 'green.300' }}
>
  Click me
</chakra.button>

const Card = chakra('div', {
  baseStyle: {
    shadow: 'lg',
    rounded: 'lg',
    bg: 'white',
  },
  sizes: {
    sm: {px: '1', py: '3', fontSize: '12px'},
    md: {px: '2', py: '5', fontSize: '16px'},
  },
  variants: {
    primary: {bgColor: 'blue.500', color: 'white'},
    danger: {bgColor: 'red.500', color: 'white'},
  }
})

Card.defaultProps = {
  size: 'sm',
  variant: 'primary'
}
function APP() {


return <div>
<Card size="md" variant="danger">hello</Card>
</div>
}

具体参考:Chakra Factory

我们所创建的chakra UI组件可以通过全局化后在需要使用到的地方直接使用。

也就是全局化Chakra-UI组件样式

  1. a. 在src文件夹中创建 xxx 文件夹,用于放置自定义Chakra-UI组件。

  1. b. 在 xxx 文件夹中创建 card.js 文件并将组件样式放置于当前文件夹中并进行默认导出。

import { chakra } from "@chakra-ui/react"

const Card = chakra('div', {
  baseStyle: {
    shadow: 'lg',
    rounded: 'lg',
    bg: 'white',
  },
  sizes: {
    sm: {px: '1', py: '3', fontSize: '12px'},
    md: {px: '2', py: '5', fontSize: '16px'},
  },
  variants: {
    primary: {bgColor: 'blue.500', color: 'white'},
    danger: {bgColor: 'red.500', color: 'white'},
  }
})

Card.defaultProps = {
  size: 'sm',
  variant: 'primary'
}

export default Card
  1. c. 在xxx 文件夹中创建index.js 文件用于导出所用的自定义组件。

import Card from './card"

export default {
    Card
}
  1. d. 在 src 文件夹中的 index.js 文件导入自定义Chakra-UI组件并和components 属性进行合并。

import xxxComponents from './xxx'

const myTheme = {
    ...theme,
    components: {
        ...theme.components,
        ...xxxComponents
    }
}
  1. e. 在组件中使用样式化组件。

const xCard = chakra('div', {
    themeKey: 'Card'
})

8. 实践案例:注册表单

通过经典的表单案例,完整演示chakra-ui当中的组件要如何去使用。

// SignUp.js
import React from 'react'
import { observer } from 'mobx-react-lite'
import {
  Stack,
  InputGroup,
  InputLeftAddon,
  InputRightAddon,
  FormControl,
  Input,
  FormHelperText,
  RadioGroup,
  Radio,
  Select,
  Flex,
  Switch,
  FormLabel,
  Button
} from '@chakra-ui/react'
import { FaUserAlt, FaLock, FaCheck } from 'react-icons/fa'
import { Center } from '@chakra-ui/react'
function SignUp (props) {
  return (
    <Center mx='25%' minW='20rem'>
      <Stack spacing='4'>
        <FormControl isRequired isDisabled isInvalid>
          <InputGroup>
            <InputLeftAddon children={<FaUserAlt />} />
            <Input placeholder='请输入用户名' />
          </InputGroup>
          <FormHelperText>用户名为必填项</FormHelperText>
        </FormControl>
        <InputGroup>
          <InputLeftAddon children={<FaLock />} />
          <Input placeholder='请输入密码' />
          <InputRightAddon children={<FaCheck />} />
        </InputGroup>
        <RadioGroup defaultValue='0'>
          <Stack spacing='4' direction='row'>
            <Radio value='0'>男</Radio>
            <Radio value='1'>女</Radio>
          </Stack>
        </RadioGroup>
        <Select placeholder='请选择学科'>
          <option value='Java'>Java</option>
          <option value='大前端'>大前端</option>
        </Select>
        <Flex>
          <Switch id='deal' mr='2' />
          <FormLabel htmlFor='deal'>是否已查阅并同意服务协议</FormLabel>
        </Flex>
        <Button colorScheme='teal' w='100%' _hover={{ bgColor: 'tomato' }}>
          注册
        </Button>
      </Stack>
    </Center>
  )
}

export default observer(SignUp)

效果如下:

Chakra-UI组件库介绍,react没入门就放弃,ui,前端,react.js,css,javascript,Powered by 金山文档
import React from 'react'
import { observer } from 'mobx-react-lite'
import {
  Image,
  Box,
  Tabs,
  TabList,
  Tab,
  TabPanel,
  TabPanels,
  Text
} from '@chakra-ui/react'

import SignUp from './SignUp'
import SignIn from './SignIn'
import logo from '../../assets/images/logo192.png'

function UserForm (props) {
  return (
    <Box bgColor='gray.100' p={3} w='100%' boxShadow='lg' borderRadius='lg'>
      <Text as='h3' my='2' align='center' w='auto' fontSize='xl'>
        <Image w='50px' src={logo} verticalAlign='middle' display='inline' />
        React Chakra UI Demo
      </Text>
      <Tabs isFitted>
        <TabList>
          <Tab _focus={{ boxShadow: 'none' }}>注册</Tab>
          <Tab _focus={{ boxShadow: 'none' }}>登录</Tab>
        </TabList>
        <TabPanels>
          <TabPanel>
            <SignUp />
          </TabPanel>
          <TabPanel>
            <SignIn />
          </TabPanel>
        </TabPanels>
      </Tabs>
    </Box>
  )
}

export default observer(UserForm)

案例颜色模式兼容:文章来源地址https://www.toymoban.com/news/detail-737468.html

Chakra-UI组件库介绍,react没入门就放弃,ui,前端,react.js,css,javascript,Powered by 金山文档
import React from 'react'
import { observer } from 'mobx-react-lite'
import {
  Image,
  Box,
  Tabs,
  TabList,
  Tab,
  TabPanel,
  TabPanels,
  Text,
  Button
} from '@chakra-ui/react'
import { useColorModeValue, useColorMode } from '@chakra-ui/react'
import SignUp from './SignUp'
import SignIn from './SignIn'
import logo from '../../assets/images/logo192.png'

function UserForm (props) {
  const { colorMode, toggleColorMode } = useColorMode()
  const bgColor = useColorModeValue('gray.200', 'gray.700')
  return (
    <Box bgColor={bgColor} p={3} w='100%' boxShadow='lg' borderRadius='lg'>
      <Button pos='fixed' right='0' bottom='0' onClick={toggleColorMode}>
        切换{colorMode === 'light' ? '暗色' : '浅色'}模式
      </Button>
      <Text as='h3' my='2' align='center' w='auto' fontSize='xl'>
        <Image w='50px' src={logo} verticalAlign='middle' display='inline' />
        React Chakra UI Demo
      </Text>
      <Tabs isFitted>
        <TabList>
          <Tab _focus={{ boxShadow: 'none' }}>注册</Tab>
          <Tab _focus={{ boxShadow: 'none' }}>登录</Tab>
        </TabList>
        <TabPanels>
          <TabPanel>
            <SignUp />
          </TabPanel>
          <TabPanel>
            <SignIn />
          </TabPanel>
        </TabPanels>
      </Tabs>
    </Box>
  )
}

export default observer(UserForm)

到了这里,关于Chakra-UI组件库介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【react】如何制作react npm包(例如UI组件Text)上传到npm

    学习本文,可以在公司需要自定义自己的各类组件,避免重复造轮子的情况下,使用Npm进行统一复用。以及类似的应用场景也能够应对。 PS:本指南只是从无到有的全过程,如果部分童鞋已经处理了部分,请自行忽略 一、注册npm账号(已注册可自行忽略) 地址:https://www.n

    2024年02月15日
    浏览(39)
  • 组件与Props:React中构建可复用UI的基石

    目录 组件:构建现代UI的基本单位 Props:组件之间的数据传递 Props的灵活性:构建可配置的组件 组件间的通信:通过回调函数传递数据 总结: 组件:构建现代UI的基本单位 组件是前端开发中的关键概念之一。它允许我们将UI拆分成独立、可复用的部分,使得代码更易于理解

    2024年02月06日
    浏览(41)
  • 2023 年 8 个最佳 React UI 组件库和框架

    将展示八个最好的 React UI 组件库和框架,如下表所示:( 星标加关注,开车不迷路 ) 「React Bootstrap:」 一个与 Bootstrap 框架集成的实用的 React UI 库。 「Grommet:」 如果您想在设计中实现可访问性,这个 React UI 组件库非常有用。 「Blueprint:」 对于桌面 React 应用程序,您需

    2024年02月13日
    浏览(53)
  • React类组件和函数组件对比-Hooks的介绍及初体验

    Hooks出现的原因 Hook 是 React 16.8 的新增特性,它可以让我们在不编写class的情况下, 使用state以及其他的React特性( 比如生命周期 ) 。 我们先来思考一下class组件相对于函数式组件有什么优势?比较常见的是下面这些优势 : class组件可以定义自己的state,用来保存组件自己内部的状

    2024年01月16日
    浏览(41)
  • 【React】如何简单快速地修改antd组件UI内部样式如字体颜色

    最近刚开始学习react 在写一个登录的页面 发现组件的颜色不太合适,默认是黑色字体 那我想修改成白色字体以适应我的页面 运用多种css文件打包策略太过复杂 对我这种小白不友好 两行代码搞定 实现需求 通过:global加上!important 在Umi项目中,在global.less文件夹下面,通过roo

    2024年02月13日
    浏览(48)
  • React UI组件库——如何快速实现antd的按需引入和自定义主题

    大家上午好呀~ 今天来学习一下React的UI组件库以及antd的使用相关的知识点。 感兴趣的小伙伴可以给个三连哦~ material-ui(国外) ant-design(国内蚂蚁金服) antd 是基于 Ant Design 设计体系的 React UI 组件库,主要用于研发企业级中后台产品。 安装antd组件库: 默认按需引入antd组件

    2024年02月02日
    浏览(38)
  • test ui-01-UI 测试组件之 Selenium 入门介绍

    Selenium 是一个涵盖多种工具和库的项目,旨在支持和实现对 Web 浏览器的自动化。 它提供了扩展来模拟用户与浏览器的交互,一个用于扩展浏览器分配的分发服务器,以及符合 W3C WebDriver 规范的基础设施,使您能够为所有主要的 Web 浏览器编写可互换的代码。 这个项目得以实

    2024年02月03日
    浏览(37)
  • test ui-02-UI 测试组件之 Appium 入门介绍

    正如主页所述,Appium的目标是支持许多不同平台(移动、Web、桌面等)的UI自动化。 不仅如此,它还旨在支持用不同语言(JS、Java、Python等)编写的自动化代码。 将所有这些功能组合到一个程序中是一个非常艰巨的任务,如果不是不可能的话! 为了实现这一目标,Appium有效

    2024年02月03日
    浏览(39)
  • Unity UG算法能力可视化UI的PhysicsRaycaster (物理射线检测)组件的介绍及使用

    PhysicsRaycaster是Unity UGUI中的一个组件,用于在UI元素上进行物理射线检测。它可以检测鼠标或触摸事件是否发生在UI元素上,并将事件传递给相应的UI元素。 PhysicsRaycaster通过发射一条射线来检测UI元素。当射线与UI元素相交时,PhysicsRaycaster会将事件传递给相应的UI元素。 Event

    2024年01月20日
    浏览(57)
  • 【C++从入门到放弃】模板介绍(函数模板、类模板)

    🧑‍💻作者: @情话0.0 📝专栏:《C++从入门到放弃》 👦个人简介:一名双非编程菜鸟,在这里分享自己的编程学习笔记,欢迎大家的指正与点赞,谢谢!   以我们之前所学的知识,假如要实现一个通用的加法函数,那么可以通过函数重载的方式来实现。 使用函数重载虽

    2023年04月14日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包