Last active
          September 12, 2020 15:08 
        
      - 
      
- 
        Save wobsoriano/09d717090aca7c411561eeccf552468e to your computer and use it in GitHub Desktop. 
    Dark nav with white page header (Tailwind to Chakra UI)
  
        
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | import { | |
| Box, | |
| Flex, | |
| Image, | |
| Link, | |
| IconButton, | |
| Button, | |
| Heading, | |
| Icon, | |
| HStack, | |
| VStack, | |
| } from '@chakra-ui/core'; | |
| import React, { useState } from 'react'; | |
| import { MdMenu, MdClose, MdNotificationsNone } from 'react-icons/md'; | |
| import { Menu, MenuButton, MenuList, MenuItem } from '@chakra-ui/core'; | |
| const links = ['Dashboard', 'Team', 'Projects', 'Calendar', 'Reports']; | |
| const menu = ['Your Profile', 'Settings', 'Sign out']; | |
| const profPic = | |
| 'https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80'; | |
| const StackedLayout = () => { | |
| const [isOpen, setIsOpen] = useState(false); | |
| return ( | |
| <React.Fragment> | |
| <Box as="nav" bg="gray.700"> | |
| <Box maxW="7xl" mx="auto" px={{ base: 6, lg: 8 }}> | |
| <Flex align="center" justify="space-between" h={16}> | |
| <Flex align="center"> | |
| <Box flexShrink={0}> | |
| <Image | |
| h={8} | |
| w={8} | |
| src="https://tailwindui.com/img/logos/workflow-mark-on-dark.svg" | |
| alt="Workflow logo" | |
| /> | |
| </Box> | |
| <Box display={{ base: 'none', md: 'block' }}> | |
| <HStack ml={10} spacing={4}> | |
| {links.map((link, idx) => ( | |
| <Link | |
| key={idx} | |
| px={3} | |
| py={2} | |
| rounded="md" | |
| fontSize="sm" | |
| fontWeight="medium" | |
| color="white" | |
| bg={!idx ? 'gray.800' : null} | |
| _focus={{ color: 'white', bg: 'gray.600' }} | |
| style={{ textDecoration: 'none' }} | |
| _hover={{ color: 'white', bg: idx ? 'gray.600' : null }} | |
| > | |
| {link} | |
| </Link> | |
| ))} | |
| </HStack> | |
| </Box> | |
| </Flex> | |
| <Box display={{ base: 'none', md: 'block' }}> | |
| <IconButton | |
| _focus={{ outline: 'none' }} | |
| variant="link" | |
| icon={ | |
| <Icon | |
| _hover={{ color: 'white' }} | |
| as={MdNotificationsNone} | |
| boxSize={6} | |
| color="gray.300" | |
| /> | |
| } | |
| /> | |
| <Menu> | |
| <MenuButton ml={3} as={Button} variant="link" _focus={{ outline: 'none' }}> | |
| <Image h={8} w={8} src={profPic} alt="image pic" rounded="full" /> | |
| </MenuButton> | |
| <MenuList> | |
| {menu.map((item, idx) => ( | |
| <MenuItem key={idx} fontSize="sm" color="gray.600" as="a" href="#"> | |
| {item} | |
| </MenuItem> | |
| ))} | |
| </MenuList> | |
| </Menu> | |
| </Box> | |
| <Flex mr={-2} display={{ md: 'none' }}> | |
| <IconButton | |
| _focus={{ outline: 'none' }} | |
| _hover={{ bg: 'gray.600' }} | |
| onClick={() => setIsOpen(!isOpen)} | |
| variant="link" | |
| icon={<Icon as={isOpen ? MdClose : MdMenu} boxSize={6} color="gray.300" />} | |
| /> | |
| </Flex> | |
| </Flex> | |
| </Box> | |
| {isOpen && ( | |
| <Box display={{ md: 'none' }}> | |
| <VStack align="stretch" spacing={1} pt={2} pb={3} px={{ sm: 3, md: 2 }}> | |
| {links.map((link, idx) => ( | |
| <Link | |
| key={idx} | |
| px={3} | |
| py={2} | |
| rounded="md" | |
| fontSize="sm" | |
| fontWeight="medium" | |
| color="white" | |
| bg={!idx ? 'gray.800' : null} | |
| _focus={{ color: 'white', bg: 'gray.600' }} | |
| style={{ textDecoration: 'none' }} | |
| _hover={{ color: 'white', bg: idx ? 'gray.600' : null }} | |
| > | |
| {link} | |
| </Link> | |
| ))} | |
| </VStack> | |
| <Box pt={4} pb={3} borderTopWidth="1px" borderTopColor="gray.600"> | |
| <Flex align="center" px={5}> | |
| <Box flexShrink={0}> | |
| <Image h={10} w={10} src={profPic} alt="image pic" rounded="full" /> | |
| </Box> | |
| <Box ml={3}> | |
| <Box fontWeight="medium" color="white"> | |
| Tom Cook | |
| </Box> | |
| <Box fontSize="sm" fontWeight="medium" color="gray.300"> | |
| [email protected] | |
| </Box> | |
| </Box> | |
| </Flex> | |
| <VStack spacing={1} align="stretch" mt={3} px={2}> | |
| {menu.map((item, idx) => ( | |
| <Link | |
| key={idx} | |
| display="block" | |
| px={3} | |
| py={2} | |
| rounded="md" | |
| color="gray.300" | |
| _focus={{ outline: 'none', color: 'white', bg: 'gray.600' }} | |
| _hover={{ color: 'white', bg: 'gray.600' }} | |
| > | |
| {item} | |
| </Link> | |
| ))} | |
| </VStack> | |
| </Box> | |
| </Box> | |
| )} | |
| </Box> | |
| <Box as="header" bg="white" boxShadow="base"> | |
| <Box maxW="7xl" mx="auto" py={6} px={{ base: 4, lg: 8 }}> | |
| <Heading as="h1" fontSize="3xl" fontWeight="bold" color="gray.800"> | |
| Dashboard | |
| </Heading> | |
| </Box> | |
| </Box> | |
| <Box as="main"> | |
| <Box maxW="7xl" mx="auto" py={6} px={{ base: 6, lg: 8 }}> | |
| <Box px={{ md: 4 }} py={6}></Box> | |
| </Box> | |
| </Box> | |
| </React.Fragment> | |
| ); | |
| }; | |
| export default StackedLayout; | 
      
      
  Author
  
  
        
      
            wobsoriano
  
      
      
      commented 
        Sep 12, 2020 
      
    
  


  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment