์ฌ๋ํ๋ ๊ฐ์ธ ๋น์ [gatsby-image] ์ปดํฌ๋ํธ!
๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง์๋ [gatsby-image]๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ์ ๋ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง( background-size: cover
)๋ก ํ์ด์ง ์น์
์ ์์ฃผ ์์ฑํ๋ฉฐ ์ด ์ฌ์ฉ ์ฌ๋ก์ ๋ํด [gatsby-image]์ ์๋ ํฌ๊ธฐ ์กฐ์ ๋ฐ ์ต์ ํ ๊ธฐ๋ฅ์ ํ์ฉํ๊ณ ์ถ์ต๋๋ค.
([gatsby-image]๋ฅผ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ก ์ฌ์ฉํ ์ ์๋ค๋ฉด ์ด๋ป๊ฒ๋ background-size: cover
์๋ฎฌ๋ ์ด์
์ ์ฌ์ฉํ ์ ์์ต๋๊น?)
์ ์๋ํ๊ณ ์๋ค๋ ์์์ ๋ฃ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค!
๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ gatsby-image ๋ฐ๋ชจ ์ฌ์ดํธ https://using-gatsby-image.gatsbyjs.org/๋ฅผ ํ์ธํ์ธ์.
๋๊ฐ ์ํ๋๊ฒ ๊ทธ๊ฑฐ์ผ?
๋น ๋ฅธ ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค!
๊ฐ์ธ ๋น ์ด๋ฏธ์ง ๋ฐ๋ชจ ์ฌ์ดํธ์์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ํ์คํ ํ๊ธฐ ์ํด...
background-image
๋ฅผ ์ฌ์ฉํ๋ ๋์ gatsby-image ๋ ํญ์ <img />
ํ๊ณ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ position: absolute;
์ฌ์ฉํ์ฌ ์๋ฎฌ๋ ์ด์
๋ฉ๋๊น?background-size/background-position
๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ฐฐ์นํ๋ ๋์ gatsby-image๋ ํญ์ object-fit/object-position
ํฉ๋๊น?๋ชจ๋ ์ต์ ๋ธ๋ผ์ฐ์ ์์ ์ ๋๋ก ํ์๋๋ ํ ๋ชจ๋ ์ด๋ฏธ์ง์ ๋ํด ์ด๋ฌํ ๋ฐฉ์์ผ๋ก gatsby-image๋ฅผ ์ฌ์ฉํ๊ฒ ๋์ด ๋งค์ฐ ๊ธฐ์ฉ๋๋ค... Gatsby์๋ IE 11 ๋ฐ Edge( ์ฌ๊ธฐ์์ ๋ธ๋ผ์ฐ์ ์ง์ ๋ฌธ์ ๋ฅผ ์ฐธ์กฐํ์ญ์์ค: caniuse.com )?
๊ทธ๋ ๋ค๋ฉด CSS ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ฅผ ์์ ํ ํผํ๋ ๊ฒ์ด ์ข์ต๋๋ค(Gatsby์ ์๋ํ๋ ์ด๋ฏธ์ง ์ฒ๋ฆฌ๋ฅผ ํ์ฉํ๊ธฐ ์ํด)? gatsby-image๋ฅผ ์ฌ์ฉํ์ฌ object-fit/object-position ์์ฑ์ ์กฐ์ ํ๋ ๋ฐ ๊ถ์ฅ๋๋ ์ ๊ทผ ๋ฐฉ์์ด ์์ต๋๊น?
๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ Gatsby์์ background-size:cover
๋ก ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ถ์ฅ๋๋ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
@ooloth ๊ตฌ์ฑ ์์๋ ๋งค์ฐ
CSS ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ ํฌ๊ธฐ๊ฐ ๋ค๋ฅธ ์ฅ์น์ ๋ํด ์ฌ๋ฌ ์ถ์ํ ํฌ๊ธฐ๋ฅผ (์ฝ๊ฒ) ์ถ๊ฐํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
ใ . ์ดํดํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ ๊ฒ์ด๋ค. ๋น์ ์ ๋์์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
๋ค๋ฅธ ์ฌ๋์ด ๋ค์์ ๋ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณต์ ํ๊ณ ์ถ๋ค๋ฉด ๋งค์ฐ ๊ด์ฌ์ด ์์ต๋๋ค.
object-fit/object-position
๋ฅผ ์ง์ํ๋ ๋ฐฉ๋ฒ(Gatsby์์ ์ด๋ฏธ ์ง์ํฉ๋๊น?)object-fit/object-position
๊ฐ์ ์กฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์
๋๊น?1.์ ๊ดํด์๋ https://github.com/bfred-it/object-fit-images๋ฅผ ์ดํด๋ณด์ญ์์ค.
@fk ํด๋ฆฌํ ๊ฐ์ฌํฉ๋๋ค! 10์ 16์ผ ํ์ฌ Edge๋ object-fit/object-position
๋ฅผ ์ง์ํ์ง๋ง IE11์ ์ฌ์ ํ โโ๋์์ด ํ์ํฉ๋๋ค.
ํ๊ฐ์ง ์กฐ์ธ ๋ถํ๋๋ ค๋ ๋ ๊น์? ํด๋ฆฌํ์ ์ค์นํ๊ณ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ํ์คํ ์๊ณ ์์ต๋๋ค...
npm install --save object-fit-images
import objectFitImages from 'object-fit-images'
..ํ์ง๋ง ํ์ฑํ ํธ์ถ์ ์ด๋๋ก ํด์ผ ํ ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
objectFitImages()
์ด ์ค์ ์ด๋์ ๋์ง ์ถ์ฒํด ์ฃผ์๊ฒ ์ต๋๊น? ๋๋ React์ Gatsby ๋ชจ๋์ ์ฝ๊ฐ ์ต์ํฉ๋๋ค.
(Btw, ๋๋ object-fit/object-position ๊ฐ์ ์กฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์์๋๊ณ ํด๋ฆฌํ๊ณผ CSS ์กฐ์ ์ ์ถ๊ฐํ๋ ๊ฒ์ ์ ๋ ฌํ๋ ์ฆ์ ํด๋น ์ฝ๋๋ฅผ ๊ณต์ ํ ๊ฒ์ ๋๋ค.)
์ข์ต๋๋ค. ๋ช ๊ฐ์ง ์คํ์ ํ๊ณ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง์ gatsby-image๋ฅผ ์ฌ์ฉํ๋ ํจ๊ณผ์ ์ธ ์๋ฃจ์ ์ ์ฐพ์์ต๋๋ค. gatsby-image์ ๊ธฐ๋ฅ์ด ์ธ๋ผ์ธ ์ด๋ฏธ์ง์๋ง ์ฌ์ฉํ๊ธฐ์๋ ๋๋ฌด ์ข๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ์ ๋ํด ๊ณ ๋ฏผํ๋ ๋ค๋ฅธ ์ฌ๋๊ณผ ์ด๊ฒ์ ๊ณต์ ํ๊ณ ์ถ์์ต๋๋ค!
๋๋ฅผ ์ํด ์ผํ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์คํ์ผ์ ์ถ๊ฐํ๊ธฐ ์ ์ gatsby-image ๊ตฌ์ฑ ์์๊ฐ ๋ค์ HTML์ ์ถ๋ ฅํ๋ค๋ ๊ฒ์ ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
<div class="gatsby-image-outer-wrapper">
<div class="gatsby-image-wrapper">
<div></div>
<!-- Placeholder (hidden after main image loads) -->
<img style="...object-fit: cover; object-position: center center;">
<!-- Main image -->
<img style="...object-fit: cover; object-position: center center;">
</div>
</div>
gatsby-image์ ์ง์ ์ค์ ๋ ์คํ์ผ์ <div class="gatsby-image-wrapper>
์ ์ฉ๋ฉ๋๋ค. ์ด๋ฏธ์ง ์์ฒด์ ์ ์ฉํ๋ ค๋ ์คํ์ผ์ <img>
ํ๊ทธ๋ฅผ ๋์์ผ๋ก ํ๋ ์์ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
gatsby-image๊ฐ CSS ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง์ฒ๋ผ ์๋ํ๋๋ก ํ๋ ค๋ฉด ๋ค์ ์คํ์ผ์ ์ถ๊ฐํ์ญ์์ค(์ฌ๊ธฐ์ gatsby-plugin-styled-components๋ฅผ ์ฌ์ฉ ํ์ต๋๋ค).
import React from 'react'
import Image from 'gatsby-image'
import styled from 'styled-components'
const BgImage = styled(Image)`
position: absolute;
top: 0;
left: 0;
width: 100%;
z-index: -1;
height: 100vh; // or whatever
// Adjust image positioning (if image covers area with defined height) and add font-family for polyfill
& > img {
object-fit: cover !important; // or whatever
object-position: 0% 0% !important; // or whatever
font-family: 'object-fit: cover !important; object-position: 0% 0% !important;' // needed for IE9+ polyfill
}
`
export default BgImage
๋ค์์ props๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ๊ฐ์ ์ค์ ํ๋ ๋์ผํ BgImage
๊ตฌ์ฑ ์์์ ๋ฒ์ ์
๋๋ค.
import React from 'react'
import Image from 'gatsby-image'
import styled from 'styled-components'
const BgImage = styled(Image)`
position: absolute;
top: 0;
left: 0;
width: 100%;
z-index: -1;
height: ${props => props.height || 'auto'};
// Adjust image positioning (if image covers area with defined height) and add font-family for polyfill
& > img {
object-fit: ${props => props.fit || 'cover'} !important;
object-position: ${props => props.position || '50% 50%'} !important;
font-family: 'object-fit: ${props => props.fit || 'cover'} !important; object-position: ${props => props.position || '50% 50%'} !important;'
}
`
export default BgImage
์ฌ๊ธฐ์ !important
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ด์์ ์ด์ง๋ ์์ง๋ง ์ธ๋ผ์ธ object-fit/object-position
์คํ์ผ์ ์ฌ์ ์ํ๋ ๋ฐ ํ์ํฉ๋๋ค.
object-fit
๋ฐ object-position
์์ฑ์ gatsby-image๊ฐ ์ค์ ๋ ๋์ด์ ์์ญ์ ํฌํจํ์ง ์๋ ํ ์กฐ์ ํ ํ์๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ์ฌ์ฉ ์ฌ๋ก์ ๊ฒฝ์ฐ object-fit: cover;
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ ํ ์๋ํ๋ฉฐ object-position
๊ฐ์ ์กฐ์ ํ๋ฉด ๋ฉ๋๋ค(gatsby-image๋ ๊ธฐ๋ณธ์ ์ผ๋ก center center
๋ก ์ค์ ํฉ๋๋ค).
์์ ์คํ์ผ์ IE๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์๋ํฉ๋๋ค( caniuse.com: object-fit/object-position ์ฐธ์กฐ ). ๋ถํํ๋ IE์์๋ object-fit/object-position
๊ฐ ์๋ํ์ง ์์ผ๋ฉฐ, ๋์ด๊ฐ ์ค์ ๋ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ ์ปจํ
์ด๋๋ฅผ ์ฑ์ฐ๋๋ก ๋์ด๋ ์ด๋ฏธ์ง๊ฐ ์๊ณก๋ฉ๋๋ค.
๋คํํ๋ IE9+์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํด๋ฆฌํ์ด ์์ต๋๋ค . ์์ต๋๋ค . (์ด ์ ์ ์ง์ ํด ์ฃผ์ @fk ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.)
ํด๋ฆฌํ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
font-family
์ ์ธ์ ํฌํจํ๋์ง ํ์ธํ์ญ์์ค(์ ์ฐธ์กฐ).npm install โsave object-fit-images
gatsby-browser.js
ํ์ผ ์์ฑgatsby-browser.js
๋ค์์ ์ถ๊ฐํ์ญ์์ค.import objectFitImages from 'object-fit-images'
exports.onInitialClientRender = () => {
objectFitImages()
}
์ฐธ๊ณ : polyfill์ ์ง์นจ ์ด " </body>
๋๋ _on DOM ready_"์ ํ์ฑํ ํธ์ถ์ ๋ฐฐ์นํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ onInitialClientRender
์์ ํด๋ฆฌํ์ ํ์ฑํํ์ต๋๋ค. ํํธ, ๋ด๊ฐ ๋ณธ @KyleAMathews๋ polyfills๊ฐ ๊ตฌํํ๋ ๊ฒ์ด ์ข์ต๋๋ค onClientEntry
๊ทธ๊ฒ ๋ ์ข์ ๊ฑฐ๋ผ ๋ง์ฝ ๋ด๊ฐํ์ง ํ์ , ๊ทธ๋์ ๋์ (๊ทํ์ ์๊ฒฌ, ์นด์ผ?).
๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค!
์ ์ ์ฅ, @ooloth ๋ ์ผ์ฐ ๋์์ค์ง ๋ชปํด ์ฃ์กํฉ๋๋ค! ๋คํ์ด๊ตฐ์!
๋์์์ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค! ๐ โค๏ธ
์ฒ๋ง์์!
@stolinski ๋ ๊ทธ์ ํํ ๋ฆฌ์ผ ์ค ํ๋์์ ๋์ผํ ๋ฌธ์ ์
https://www.youtube.com/watch?v=zhM6C0P7VO0
<Img
sizes={dataSizes}
style={{
position: "absolute",
left: 0,
top: 0,
width: "100%",
height: "100%"
}}
/>
ํจ์ฌ ๊ฐ๋จํฉ๋๋ค! @grod220๋ ๊ฐ์ฌํฉ๋๋ค.
@grod220 ์ฌ์ ์ด์ ... ๊ฐ์ฌํฉ๋๋ค ๐
@enten ๊ทธ๊ฒ์ ํจ๊ณผ๊ฐ ์์ง๋ง srcset
๋ฐ sizes
๋ฅผ ํตํด ๊ฐ ๋ทฐํฌํธ ํฌ๊ธฐ์์ ์ ์ ํ ํฌ๊ธฐ์ ์ด๋ฏธ์ง ๋ฒ์ ์ ์ ๊ณตํ๊ธฐ ์ํด gatsby-image
๋ฅผ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์์ ์ด์ ์ ๋์น๊ฒ ๋ฉ๋๋ค. sizes
์์ฑ.
์ ์๊ฒ gatsby-image
๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์ด๋ฏธ์ง์ ์ต์ ์ ์ฌ๋ณธ์ ์ฝ๊ฒ ์ ๋ฌํ ์ ์๋ ๊ธฐ๋ฅ์ Gatsby์ ์ต๊ณ ์ ๊ธฐ๋ฅ์
๋๋ค. CSS ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด๋ฌํ ์ด์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
@ooloth ์ทจ์ฌํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ฌ๊ธฐ ๊ฐ์ธ ๋น ์ด๋ณด์์ ๋๋ค. ์คํ์ผ๋ง ์ง์นจ์์ ์ค์ ์ด๋ฏธ์ง๊ฐ ์ธ๊ธ๋ ์์น๋ ์ด๋์ธ๊ฐ์?
@fucata55 ๋ฐ๊ฐ์ต๋๋ค!
์ค์ ์ด๋ฏธ์ง๋ ๋จผ์ graphql์ ํตํด ์ฟผ๋ฆฌํ ๋ค์ gatsby-image
๊ตฌ์ฑ ์์์ fluid
๋๋ fixed
์ํ(๋๋ v1์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ sizes
๋๋ resolutions
์ํ).
๊ทธ๋ฌ๋ฉด gatsby-image
๊ตฌ์ฑ ์์๊ฐ ํ์ํ ์ด๋ฏธ์ง์ ๋ชจ๋ ๋ณต์ฌ๋ณธ์ ์์ฑํ๊ณ ๋ณต์กํ sizes
์์ฑ์ ๊ฒฐ๊ณผ HTML์ <img />
์ ์ถ๊ฐํฉ๋๋ค.
gatsby-image
๋ฅผ ์ฌ์ฉํ๊ณ ์ด๋ฏธ์ง๋ฅผ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ ๋ํ ์ฐ์ต์ ๋ณด๋ ค๋ฉด ์ฌ๊ธฐ v2์ ๊ฒฝ์ฐ gatsby-image
๋ฌธ์๋ฅผ ์ฐธ์กฐ ํ๊ฑฐ๋ v1์ ๊ฒฝ์ฐ ์ฌ๊ธฐ (ํ๋ฅญํฉ๋๋ค)๋ฅผ ์ฐธ์กฐํ์ธ์.
@ooloth ๊ทํ์ ์์ ์ ๋งค์ฐ ๋์์ด ๋์์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
"background-attachment: fixed;"๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ ํํ ์ด๋์. ๋๋ ๊ทธ๊ฒ์ ์๋์ํฌ ์ ์์ง๋ง ์ฌํ๋ฆฌ์์๋ ๊ทธ๋ ์ง ์์ต๋๋ค. ์๋์ํค๋ฉด ํ์ด์ง์ ๊ตฌ์ฑ ์์๋ฅผ ๋ ์ถ๊ฐํ ๋๊น์ง ์ด๋ฏธ์ง๊ฐ ์ข์ ๋ณด์ ๋๋ค. ๋ ๋ง์ ๊ตฌ์ฑ ์์๋ฅผ ์ถ๊ฐํ ์๋ก ๊ทธ๋ฆผ์ด ์ปค์ง๋๋ค. ๊ทธ๋์ ์ฌํ๋ฆฌ ๋ฌธ์ ์ ๋ํด ํด๋ฆฌํ์ ํ์ง๋ง "background-attachment: fixed;"๋ ๋ ์ด์ ์ต์ ์ด ์๋๊ฑฐ๋ ๊ทธ๋ ๊ฒ ๋ณด์ ๋๋ค. ๋์์ ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
@zachgaskin ๋์์ด ๋์์ผ๋ฉด ํฉ๋๋ค!
์ด๊ฒ์ ์๋ง๋ CSS ๋ฌธ์ ์ธ ๊ฒ ๊ฐ์ผ๋ฉฐ(์ฆ, Gatsby ๋๋ gatsby-image
์ ๊ด๋ จ์ด ์์) background-attachment: fixed
์ฌ์ฉํ ๊ฒฝํ์ด ๋ง์ง ์๊ณ ์ ๊ฐ์ค๋ฝ๊ฒ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์์ต๋๋ค. ๋ค์ ์ค๋ช
ํฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ์ต์ํ์ผ๋ก ์ฌํํ ๋งํฌ๋ฅผ ๊ฒ์ํ ์ ์๋ค๋ฉด ๊ธฐ๊บผ์ด ์ดํด๋ณด๊ฒ ์ต๋๋ค.
caniuse.com ์ ๋ฐ๋ฅด๋ฉด iOS Safari๋ background-attachment: fixed
์ง์ํ์ง ์์ง๋ง macOS Safari๋ ์๋ํด์ผ ํฉ๋๋ค(...).
ํน์ ๋ธ๋ผ์ฐ์ ๊ฐ ๋์ผํ CSS๋ฅผ ๋ค๋ฅด๊ฒ ์ทจ๊ธํ๋ ์ด์ ๋ฅผ ๋ถ๋ฅํ๋ ๊ฒ์ ์ ๋ง ๊ณ ํต์ค๋ฌ์ธ ์ ์์ต๋๋ค. ํ์ด์ ๋น๋๋ค!
@zachgaskin @ooloth ๋๋ ์ด๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ด์์ ์ด์ง๋ ์์ง๋ง ์ ๊ฐ ์๊ฐํด๋ธ ํด๊ฒฐ์ฑ
์ ์ด๋ฏธ์ง์ position: 'fixed'
๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์ ์ฒด ํ์ด์ง์ ๋ฐฐ๊ฒฝ์ ์์์ ์๋ฏธํฉ๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ๊ณณ์์ ์ง์ ๋ ๋ฐฐ๊ฒฝ์ด ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค. z-index: -1
๋ ๋ค๋ฅธ ๋ฐฐ๊ฒฝ ๋ค์ ์จ๊ฒจ์ ธ ์๋์ง ํ์ธํฉ๋๋ค.
<Img
sizes={dataSizes}
style={{
position: "fixed",
left: 0,
top: 0,
width: "100%",
height: "100%",
z-index: -1
}}
/>
๊ฐ์ธ ๋น ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง ๋ ํ ๊ฑธ์ ๋ ๋์๊ฐ ๊ฒ์ ๋๋ค ...
IE polyfill์ ์ฌ์ฉํ์ฌ ์ง์ gatsby-image๋ฅผ ๊ฐ์ ธ์ค๊ณ ์คํ์ผ์ !important๋ฅผ ์ฌ์ฉํ๋ ๋์ objectFit ๋ฐ objectPosition์ ์ํ์ผ๋ก ์ ์ฉํ๋ ๊ฒ์ด ์ ์ฉํ ์ ์์ต๋๋ค.
import Img from 'gatsby-image/withIEPolyfill'
<Img
fixed={heroImage.childImageSharp.fixed}
style={{ width: '100%', height: '100%' }}
objectFit="cover"
objectPosition="bottom left"
/>
๊ฐ์ฌํฉ๋๋ค, @AronBe
๋๋ ํ์ฌ Gatsby์ ํจ๊ป ์ผํ๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์ ์ต์ ์ ๋ณด๋ฅผ ๋ชจ๋ฆ ๋๋ค. ๊ทธ๋ฌ๋ Gatsby Background Image(์์์ ์ธ๊ธํจ)๋ ๋ด ๋ง์ง๋ง ํ๋ก์ ํธ์์ ์ค์ ๋ก ๋๋ฅผ ์ํด ํธ๋ฆญ์ ์ํํ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ข์ต๋๋ค. ๋ช ๊ฐ์ง ์คํ์ ํ๊ณ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง์ gatsby-image๋ฅผ ์ฌ์ฉํ๋ ํจ๊ณผ์ ์ธ ์๋ฃจ์ ์ ์ฐพ์์ต๋๋ค. gatsby-image์ ๊ธฐ๋ฅ์ด ์ธ๋ผ์ธ ์ด๋ฏธ์ง์๋ง ์ฌ์ฉํ๊ธฐ์๋ ๋๋ฌด ์ข๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ์ ๋ํด ๊ณ ๋ฏผํ๋ ๋ค๋ฅธ ์ฌ๋๊ณผ ์ด๊ฒ์ ๊ณต์ ํ๊ณ ์ถ์์ต๋๋ค!
๋๋ฅผ ์ํด ์ผํ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. CSS ์คํ์ผ ์ถ๊ฐ
์คํ์ผ์ ์ถ๊ฐํ๊ธฐ ์ ์ gatsby-image ๊ตฌ์ฑ ์์๊ฐ ๋ค์ HTML์ ์ถ๋ ฅํ๋ค๋ ๊ฒ์ ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
gatsby-image์ ์ง์ ์ค์ ๋ ์คํ์ผ์
<div class="gatsby-image-wrapper>
์ ์ฉ๋ฉ๋๋ค. ์ด๋ฏธ์ง ์์ฒด์ ์ ์ฉํ๋ ค๋ ์คํ์ผ์<img>
ํ๊ทธ๋ฅผ ๋์์ผ๋ก ํ๋ ์์ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.gatsby-image๊ฐ CSS ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง์ฒ๋ผ ์๋ํ๋๋ก ํ๋ ค๋ฉด ๋ค์ ์คํ์ผ์ ์ถ๊ฐํ์ญ์์ค(์ฌ๊ธฐ์ gatsby-plugin-styled-components๋ฅผ ์ฌ์ฉ ํ์ต๋๋ค).
๋ค์์ props๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ๊ฐ์ ์ค์ ํ๋ ๋์ผํ
BgImage
๊ตฌ์ฑ ์์์ ๋ฒ์ ์ ๋๋ค.์ฌ๊ธฐ์
!important
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ด์์ ์ด์ง๋ ์์ง๋ง ์ธ๋ผ์ธobject-fit/object-position
์คํ์ผ์ ์ฌ์ ์ํ๋ ๋ฐ ํ์ํฉ๋๋ค.object-fit
๋ฐobject-position
์์ฑ์ gatsby-image๊ฐ ์ค์ ๋ ๋์ด์ ์์ญ์ ํฌํจํ์ง ์๋ ํ ์กฐ์ ํ ํ์๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ์ฌ์ฉ ์ฌ๋ก์ ๊ฒฝ์ฐobject-fit: cover;
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ ํ ์๋ํ๋ฉฐobject-position
๊ฐ์ ์กฐ์ ํ๋ฉด ๋ฉ๋๋ค(gatsby-image๋ ๊ธฐ๋ณธ์ ์ผ๋กcenter center
๋ก ์ค์ ํฉ๋๋ค).2. ๊ฐ์ฒด ๋ง์ถค/๊ฐ์ฒด ์์น์ ๋ํ IE9+ Polyfill ์ถ๊ฐ
์์ ์คํ์ผ์ IE๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์๋ํฉ๋๋ค( caniuse.com: object-fit/object-position ์ฐธ์กฐ ). ๋ถํํ๋ IE์์๋
object-fit/object-position
๊ฐ ์๋ํ์ง ์์ผ๋ฉฐ, ๋์ด๊ฐ ์ค์ ๋ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ ์ปจํ ์ด๋๋ฅผ ์ฑ์ฐ๋๋ก ๋์ด๋ ์ด๋ฏธ์ง๊ฐ ์๊ณก๋ฉ๋๋ค.๋คํํ๋ IE9+์์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํด๋ฆฌํ์ด ์์ต๋๋ค . ์์ต๋๋ค . (์ด ์ ์ ์ง์ ํด ์ฃผ์ @fk ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.)
ํด๋ฆฌํ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
font-family
์ ์ธ์ ํฌํจํ๋์ง ํ์ธํ์ญ์์ค(์ ์ฐธ์กฐ).npm install โsave object-fit-images
gatsby-browser.js
ํ์ผ ์์ฑgatsby-browser.js
๋ค์์ ์ถ๊ฐํ์ญ์์ค.์ฐธ๊ณ : polyfill์ ์ง์นจ ์ด "
</body>
๋๋ _on DOM ready_"์ ํ์ฑํ ํธ์ถ์ ๋ฐฐ์นํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์onInitialClientRender
์์ ํด๋ฆฌํ์ ํ์ฑํํ์ต๋๋ค. ํํธ, ๋ด๊ฐ ๋ณธ @KyleAMathews๋ polyfills๊ฐ ๊ตฌํํ๋ ๊ฒ์ด ์ข์ต๋๋คonClientEntry
๊ทธ๊ฒ ๋ ์ข์ ๊ฑฐ๋ผ ๋ง์ฝ ๋ด๊ฐํ์ง ํ์ , ๊ทธ๋์ ๋์ (๊ทํ์ ์๊ฒฌ, ์นด์ผ?).๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค!