fix: hero image is now correctly responsive for both width and height

pull/3056/head
William Grant 1 year ago
parent a38555c03e
commit 76390ceb9d

@ -1,58 +1,29 @@
import { useEffect, useState } from 'react';
import { useWindowSize } from 'react-use';
import styled from 'styled-components'; import styled from 'styled-components';
type PositionWithinContainer = 'left' | 'right'; const StyledHeroContainer = styled.div`
const StyledHeroContainer = styled.div<{ positionWithinContainer: PositionWithinContainer }>`
position: relative;
width: 40%; width: 40%;
height: 100%; height: 100%;
overflow: hidden;
z-index: 0;
&:after { div {
content: ''; width: 100%;
position: absolute;
top: 0;
right: 0;
width: 20px;
height: 100%; height: 100%;
background-image: linear-gradient(to right, rgba(27, 27, 27, 0), rgba(27, 27, 27, 1)); overflow: hidden;
} }
`; `;
const StyledHero = styled.img<{ const StyledHero = styled.img`
positionWithinContainer: PositionWithinContainer; width: 100%;
}>`
width: auto;
height: 100%; height: 100%;
position: absolute; object-fit: cover;
top: 50%; object-position: right center;
${props => (props.positionWithinContainer === 'right' ? 'right: -16px;' : 'left: -80px;')}
transform: translateY(-50%);
`; `;
export const Hero = () => { export const Hero = () => {
const [positionWithinContainer, setPositionWithinContainer] = useState<PositionWithinContainer>(
'left'
);
const { width } = useWindowSize();
useEffect(() => {
if (width) {
if (width <= 1920) {
setPositionWithinContainer('right');
} else {
setPositionWithinContainer('left');
}
}
}, [width]);
return ( return (
<StyledHeroContainer positionWithinContainer={positionWithinContainer}> <StyledHeroContainer>
<StyledHero src={'images/hero.png'} positionWithinContainer={positionWithinContainer} /> <div>
<StyledHero src={'images/hero.png'} />
</div>
</StyledHeroContainer> </StyledHeroContainer>
); );
}; };

Loading…
Cancel
Save