React
by Abdul Ahmad
HTML
<div id="app"></div>
SCSS
html, body {
margin: 0;
font-family: helvetica;
}
.hero {
padding: 100px 0;
background: #0063ff;
}
.page-width {
max-width: 1000px;
padding: 0 16px;
margin: 0 auto;
display: flex;
align-items: stretch;
}
.column {
border: 1px dashed darken(#0063ff, 10%);
width: 50%;
min-height: 100px;
}
.left-content-wrap {
border: 1px dashed red;
box-sizing: border-box;
height: 100%;
display: flex;
align-content: center;
}
.left-content {
margin-top: auto;
margin-bottom: auto;
border: 1px dashed darken(#0063ff, 10%);
box-sizing: border-box;
h1 {
margin: 0;
}
p {
margin-bottom: 0;
}
}
.image {
width: 100%;
padding-bottom: 100%;
border-radius: 100%;
border: 1px solid black;
margin-bottom: -50px;
margin-top: 50px;
}
React
function Hero({ renderLeftContent, renderRightContent }) {
return (
<div class='hero'>
<div class='page-width'>
<div class='column'>
{ renderLeftContent() }
</div>
<div class='column'>
{ renderRightContent() }
</div>
</div>
</div>
);
}
function SpecificHeroForSection() {
return (
<Hero
alignItems='stretch'
renderLeftContent={() => (
<div class='left-content-wrap'>
<div class='left-content'>
<h1>
title
</h1>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
</p>
</div>
</div>
)}
renderRightContent={() => (
<div class='image'>
</div>
)}
/>
);
}
ReactDOM.render(<SpecificHeroForSection />, document.querySelector("#app"))