你如何在 React material ui 应用程序中找到应用程序栏高度?
how do you find app bar height in react material ui app?
我想在第一次打开我的网站时创建一个横跨整个屏幕的图像。我正在使用反应和 material ui。目前我的 JSX 大致是这样的。我使用了默认的 material ui 主题。
<AppBar>
//code in between
</AppBar>
<Container sx={{margin: '0px', padding: '0px'}}>
<img src={headerPicture} style={{minHeight: '100vh', maxWidth: '100vw'}}/>
</Container>
问题是,100vh 没有考虑应用栏的高度,因此图像 + 应用栏比屏幕大。我想我必须做这样的事情:
<img src={headerPicture} style={{minHeight: '100vh - AppBarHeight', maxWidth: '100vw'}}/>
其中 AppBarWidth 等于应用栏的高度,因为它响应地变化。
你知道我将如何找出应用栏的高度吗?
我通过在 AppBar 上设置固定高度(可以响应)并使用常量应用它,在一个应用程序中实现了这一点。
- AppBar.js(例子)
export const APP_BAR_HEIGHT = 80;
export const APP_BAR_HEIGHT_LG = 140;
const AppBar = () => {
return (
<div style={{ height: isLargeScreen ? APP_BAR_HEIGHT_LG : APP_BAR_HEIGHT}}>
{/* app bar here */}
</div>
);
}
export default AppBar;
然后您在项目中导入并使用这些常量。
另外
写一个钩子
const useWindowHeight = () => {
const [height, setHeight] = React.useState(window.innerHeight);
React.useEffect(() => {
const handleResize = () => {
setHeight(window.innerHeight);
}
window.addEventListener('resize', handleResize);
return () => {
window.removeEventListener('resize', handleResize);
}
}, []);
return height;
}
使用此值而不是 vh,因为 window 滚动时某些移动设备的高度会发生变化。最后,这可能看起来像这样:
import AppBar, { APP_BAR_HEIGHT, APP_BAR_HEIGHT_LG } from 'whateverpath';
// ...
const windowHeight = useWindowHeight();
return (
<>
<AppBar>
//code in between
</AppBar>
<Container sx={{margin: '0px', padding: '0px'}}>
<img src={headerPicture} style={{minHeight: windowHeight - APP_BAR_HEIGHT, maxWidth: '100vw'}}/>
</Container>
</>
)
我想在第一次打开我的网站时创建一个横跨整个屏幕的图像。我正在使用反应和 material ui。目前我的 JSX 大致是这样的。我使用了默认的 material ui 主题。
<AppBar>
//code in between
</AppBar>
<Container sx={{margin: '0px', padding: '0px'}}>
<img src={headerPicture} style={{minHeight: '100vh', maxWidth: '100vw'}}/>
</Container>
问题是,100vh 没有考虑应用栏的高度,因此图像 + 应用栏比屏幕大。我想我必须做这样的事情:
<img src={headerPicture} style={{minHeight: '100vh - AppBarHeight', maxWidth: '100vw'}}/>
其中 AppBarWidth 等于应用栏的高度,因为它响应地变化。
你知道我将如何找出应用栏的高度吗?
我通过在 AppBar 上设置固定高度(可以响应)并使用常量应用它,在一个应用程序中实现了这一点。
- AppBar.js(例子)
export const APP_BAR_HEIGHT = 80;
export const APP_BAR_HEIGHT_LG = 140;
const AppBar = () => {
return (
<div style={{ height: isLargeScreen ? APP_BAR_HEIGHT_LG : APP_BAR_HEIGHT}}>
{/* app bar here */}
</div>
);
}
export default AppBar;
然后您在项目中导入并使用这些常量。
另外
写一个钩子
const useWindowHeight = () => {
const [height, setHeight] = React.useState(window.innerHeight);
React.useEffect(() => {
const handleResize = () => {
setHeight(window.innerHeight);
}
window.addEventListener('resize', handleResize);
return () => {
window.removeEventListener('resize', handleResize);
}
}, []);
return height;
}
使用此值而不是 vh,因为 window 滚动时某些移动设备的高度会发生变化。最后,这可能看起来像这样:
import AppBar, { APP_BAR_HEIGHT, APP_BAR_HEIGHT_LG } from 'whateverpath';
// ...
const windowHeight = useWindowHeight();
return (
<>
<AppBar>
//code in between
</AppBar>
<Container sx={{margin: '0px', padding: '0px'}}>
<img src={headerPicture} style={{minHeight: windowHeight - APP_BAR_HEIGHT, maxWidth: '100vw'}}/>
</Container>
</>
)