typescript 如何使用MUI 5在底部放置Box标签

agxfikkp  于 2023-06-24  发布在  TypeScript
关注(0)|答案(1)|浏览(112)

我想在页面底部放置一个Box标签。
当前行为:

我想设置文本字段和发送按钮在页面的底部(浏览器和移动的)。我希望将用户消息保留在文本字段框上方。左侧的消息和右侧的消息,就像聊天一样。用户可以滚动聊天但是文本字段和发送按钮应该是固定的.(基本上类似于chatGPT UI)。

import { Box, Button, Container, TextField, Typography } from '@mui/material';
import { useState } from 'react';

import Header from './header';
import Nav from './nav';

const APP_BAR_MOBILE = 64;

const DashboardLayout = () => {
    const [open, setOpen] = useState(false);

    return (
        <Box
            sx={{
                display: 'flex',
                height: '100%',
                overflow: 'hidden',
            }}
        >
            <Nav openNav={open} onCloseNav={() => setOpen(false)} />
            <Header onOpenNav={() => setOpen(true)} />
            <Container>
                <Box
                    sx={{
                        flexGrow: 1,
                        overflow: 'auto',
                        marginTop: `${APP_BAR_MOBILE + 24}px`,
                        backgroundColor: 'pink',
                        height: "100%",
                    }}
                >
                    <Typography variant='h1'>s</Typography>

                    <Box display={"flex"}>
                        <TextField fullWidth size='small' variant='outlined' autoFocus />
                        <Button variant='contained' sx={{ ml: 1 }}>Send</Button>
                    </Box>
                </Box>
            </Container>
        </Box>
    );
};

export default DashboardLayout;

我添加了正文和HTML的CSS到边距和填充0;
public URL = https://stackblitz.com/edit/vitejs-vite-4fja9o?file=src%2Flayouts%2Fdashboard%2Findex.tsx
我尝试添加不同的位置样式和添加网格,但不起作用。

bcs8qyzn

bcs8qyzn1#

您可以使用MUI <Drawer />组件实现与ChatGPT类似的UI,并将Textfield放置在fixed位置。你可以找到我在here上做的一个工作示例。
👉 代码将像这样,你可以自定义它,因为你需要,

<Box display="flex">

  {/* YOUR SIDEBAR */}
  <Drawer
    variant="permanent"
    anchor="left"
    sx={{ width: 240, flexShrink: 0, '& .MuiDrawer-paper': { width: 240, boxSizing: 'border-box' } }}
  >
    <List>
      <h3>Title 01</h3>
      <h3>Title 02</h3>
    </List>
  </Drawer>

  <Box component="main" flexGrow={1} p={3}>
    <Box maxWidth="md" mx="auto">

    {/* YOUR MESSAGES*/}
      <Typography>Message 01</Typography>
      <Typography>Message 02</Typography>
    
    {/* YOUR FIXED BOX AND TEXTFIELD*/}
      <Box position="fixed" bottom={10} width="100%" bgcolor="lightgray" maxWidth="md" mx="auto">
        <TextField label="Textfield" sx={{ width: '100%' }} />
      </Box>
    </Box>
  </Box>

</Box>

希望能帮上忙。

相关问题