site/components/background-image.js
2023-02-01 23:13:23 +08:00

42 lines
967 B
JavaScript

import { Box } from 'theme-ui'
import Image from 'next/image'
/*
* Use this component inside a container with CSS:
* `position: relative; overflow: hidden;`
* then pass width/height/alt/src as usual
* (you can pass `gradient` valueless to avoid gradient)
*/
const BGImg = ({
gradient = 'linear-gradient(rgba(0,0,0,0.25), rgba(0,0,0,0.5))',
...props
}) => (
<Box
sx={{
position: 'absolute',
display: 'block',
top: 0,
left: 0,
right: 0,
bottom: 0,
zIndex: 0,
'&:after': {
content: '""',
position: 'absolute',
backgroundImage: gradient,
top: 0,
left: 0,
right: 0,
bottom: 0
},
'> span': { height: '100% !important', width: '100% !important' },
img: { objectFit: 'cover', objectPosition: 'center 100%' },
'~ *': { position: 'relative' }
}}
>
<Image layout="responsive" {...props} />
</Box>
)
export default BGImg