æããã®ã£ãããŒãš[gatsby-image]ã³ã³ããŒãã³ãïŒ
èæ¯ç»åã«ã[gatsby-image]ã䜿çšããæ¹æ³ã¯ãããŸããïŒ ç§ã¯é »ç¹ã«èæ¯ç»åïŒ background-size: cover
ïŒã䜿çšããŠããŒãžã»ã¯ã·ã§ã³ãäœæããŸããããã®ãŠãŒã¹ã±ãŒã¹ã§ã¯[gatsby-image]ã®èªåãµã€ãºå€æŽããã³æé©åæ©èœãå©çšããããšèããŠããŸãã
ïŒ[gatsby-image]ãèæ¯ç»åã«äœ¿çšã§ããªãå Žåãã©ããããããbackground-size: cover
ãã·ãã¥ã¬ãŒãããããã«äœ¿çšã§ããŸããïŒïŒ
ãããããªãã®ããã«ããŸãæ©èœããŠãããšèããŠçŽ æŽãããã§ãïŒ
èæ¯ç»åã«ã€ããŠã¯ãgatsby-imageãã¢ãµã€ãhttps://using-gatsby-image.gatsbyjs.org/ãã芧ãã ããã
ããã¯ããªããæããã®ã§ããïŒ
æ©éã®ãè¿äºããããšãããããŸãïŒ
gatsby-imageãã¢ãµã€ãã§äœãèµ·ãã£ãŠããã®ãã確å®ã«ç解ããããã«...
background-image
ã䜿çšãã代ããã«ãgatsby-imageã¯åžžã«<img />
ã䜿çšããèæ¯ç»åã¯position: absolute;
ã䜿çšããŠã·ãã¥ã¬ãŒããããŸããïŒbackground-size/background-position
ã䜿çšããŠç»åãé
眮ãã代ããã«ãgatsby-imageã¯åžžã«object-fit/object-position
ãŸããïŒææ°ã®ãã¹ãŠã®ãã©ãŠã¶ã§æ£ãã衚瀺ãããéãããã¹ãŠã®ç»åã«ãã®ããã«gatsby-imageã䜿çšã§ããããšãå®å šã«å¬ããæããŸã... Gatsbyã«ã¯ãIE 11ããã³Edgeã®object-fit / object-positionããããã£ããµããŒãããæ段ãå«ãŸããŠããŸããïŒããã§ãã©ãŠã¶ãµããŒãã®åé¡ãåç §ããŠãã ããïŒ caniuse.com ïŒïŒ
ãããããªããCSSã®èæ¯ç»åãå®å šã«é¿ããããšããå§ãããŸããïŒã®ã£ãããŒã®èªåç»ååŠçãå©çšããããïŒïŒ gatsby-imageã䜿çšããŠãobject-fit / object-positionããããã£ã調æŽããããã®æšå¥šãããã¢ãããŒãã¯ãããŸããïŒ
ããã§ãªãå Žåãã®ã£ãããŒã§background-size:cover
èæ¯ç»åã䜿çšããããã®æšå¥šãããã¯ãã¹ãã©ãŠã¶ã®æ¹æ³ã¯ãããŸããïŒ
@oolothã³ã³ããŒãã³ãã¯éåžžã«æ°ããã®ã§ãããªãã®è³ªåã«å¯Ÿããç§ã®çãã¯âŠå¥œããªããã«gatsby-imageã䜿ã£ãŠéãã§ãèŠã€ãããã®ãå ±åããŠãã ãã:-)
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ã®äž¡æ¹ã«å°ãæ £ããŠããŸããã
ïŒãšããã§ãç§ã¯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
ããã¯ãå°éå
·ã䜿çšããŠåçãªå€ãèšå®ããåã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
ã¹ã¿ã€ã«ããªãŒããŒã©ã€ãããããã«å¿
èŠã§ãã
gatsby-imageãèšå®ãããé«ãã®é åãã«ããŒããŠããªãéãã object-fit
ããã³object-position
ããããã£ã調æŽããå¿
èŠããªãããšã«æ³šæããŠãã ããã ãããã®ãŠãŒã¹ã±ãŒã¹ã§ã¯ãéåžžã 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()
}
泚ïŒç§ã¯ããªãã£ã«ãã¢ã¯ãã£ãã«onInitialClientRender
ããªãã£ã«ã®ããã®åœä»€ã掻æ§åé»è©±ããããããã«ãã"ã®åã«</body>
ããŸãã¯_on DOM ready_"ã ä»ã®å Žæã§ãç§ãèŠã@KyleAMathewsã¯polyfillsãå®è£
ããããšããå§ãããŸãonClientEntry
ãããè¯ãã§ãããå Žåãç§ã¯ãªããšç¢ºä¿¡ããŠããã®ã§ã代ããã«ïŒä»»æã®ã³ã¡ã³ããã«ã€ã«ïŒïŒã
ã圹ã«ç«ãŠã°å¹žãã§ãã
ããããããŒã@ oolothã«æ©ãæ»ã£ãŠããªãã£ãããšããè©«ã³ããŸãïŒ ããªãããããç解ããŠãããŠããããã§ãïŒ
æ»ã£ãŠããŠãããªãã®çºèŠãæžããŠãããŠããããšãïŒ ðâ€ïž
ã©ãããããŸããŠïŒ
@stolinskiã¯ã圌ã®ãã¥ãŒããªã¢ã«ã®1ã€ã§åãåé¡ã«
https://www.youtube.com/watch?v=zhM6C0P7VO0
<Img
sizes={dataSizes}
style={{
position: "absolute",
left: 0,
top: 0,
width: "100%",
height: "100%"
}}
/>
ã¯ããã«ç°¡åã§ãïŒ @ grod220ã«æè¬ããŸãã
ç°¡åã ã£ã@ grod220 ...ããããšãð
@entenããã¯æ©èœããŸããã gatsby-image
ã䜿çšããŠã srcset
ãšsizes
ä»ããŠãåãã¥ãŒããŒããµã€ãºã§é©åãªãµã€ãºã®ç»åãé
ä¿¡ããããšã®ããã©ãŒãã³ã¹äžã®å©ç¹ãèŠéããŠããŸããŸãã
ç§ã«ãšã£ãŠã gatsby-image
ã䜿çšããŠåç»åã®æé©ãªã³ããŒãç°¡åã«é
ä¿¡ã§ããããšã¯ãã®ã£ãããŒã®æé«ã®æ©èœã§ãã CSSã®èæ¯ç»åã䜿çšããå Žåããããã®å©ç¹ã¯å©çšã§ããŸããã
@oolothãããã«ããŒããŠãããŠããããšãã ã®ã£ãããŒåå¿è ã¯ãã¡ãã ã¹ã¿ã€ãªã³ã°ã®èª¬æã®äžã§ãå®éã®ç»åã¯ã©ãã«èšèŒãããŠããŸããïŒ
@ fucata55ãããããé¡ãããŸãïŒ
å®éã®ç»åã¯ãæåã«graphqlãä»ããŠã¯ãšãªãå®è¡ãã次ã«ãããããšããŠgatsby-image
ã³ã³ããŒãã³ãã®fluid
ãŸãã¯fixed
ããããïŒãŸãã¯v1ã䜿çšããŠããå Žåã¯ãã®sizes
æž¡ããã®ã§ãã resolutions
å°éå
·ïŒã
次ã«ã gatsby-image
ã³ã³ããŒãã³ãã¯ãå¿
èŠãªç»åã®ãã¹ãŠã®ã³ããŒãçæããçµæã®HTMLã®<img />
ã«è€éãªsizes
å±æ§ãè¿œå ããŸãã
gatsby-image
䜿çšæ¹æ³ïŒããã³ç»åã®éä¿¡æ¹æ³ïŒã®ãŠã©ãŒã¯ã¹ã«ãŒã«ã€ããŠã¯ãv2ã®å Žåã¯ãã¡ãã®gatsby-image
ããã¥ã¡ã³ãããv1ã®å Žåã¯ãã¡ãã®ããã¥ã¡ã³ããåç
§ããŠãã ããïŒãã°ãããïŒã
@oolothããªãã®ä»äºã¯ãšãŠã圹ã«ç«ã¡ãŸããã ããããšãããããŸããã
ãbackground-attachmentïŒfixed;ãã䜿çšããããšã¯ã§ããŸããïŒ ãããããªããæ£ç¢ºã«ã©ãã«ã ç§ã¯ãããåããããšãã§ããŸããããµãã¡ãªã§ã¯ã§ããŸããã ãããæ©èœããããã«ãªããšãããŒãžã«ã³ã³ããŒãã³ããè¿œå ãããŸã§ãç»åã¯èŠæ ããè¯ããªããŸãã è¿œå ããã³ã³ããŒãã³ããå€ãã»ã©ãç»åã¯å€§ãããªããŸãã ããã§ãç§ã¯ãµãã¡ãªã®åé¡ã®ããã«ããªãã£ã«ããŸããããbackground-attachmentïŒfixed;ãã¯ãã¯ããªãã·ã§ã³ã§ã¯ãªãããããæãããŸãã ã©ããªå©ãã§ã倧æè¿ã§ãã
@zachgaskinå©ããŠ
ããã¯ããããCSSã®åé¡ã®ããã§ãïŒã€ãŸããGatsbyãgatsby-image
ãšã¯é¢ä¿ãããŸããïŒã background-attachment: fixed
䜿çšçµéšãããŸããªããåé¡ãçºçããŠããªãã®ã§ã¯ãªãããšæããŸããåèšè¿°ã ãã®åé¡ã®æå°éã®è€è£œãžã®ãªã³ã¯ãæçš¿ããããšãã§ããã°ãç§ã¯åãã§èŠãŠãããŸãã
caniuse.comã«ãããšã 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
}}
/>
ã®ã£ãããŒã®èæ¯ç»åã¯äžæ©åé²ã§ã...
ã¹ã¿ã€ã«ã§ïŒimportantã䜿çšãã代ããã«ãIEããªãã£ã«ã䜿çšããŠgatsby-imageãçŽæ¥ã€ã³ããŒããã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 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ã䜿çšããŸããïŒã
ããã¯ãå°éå ·ã䜿çšããŠåçãªå€ãèšå®ããåã
BgImage
ã³ã³ããŒãã³ãã®ããŒãžã§ã³ã§ããããã§ã®
!important
ã®äœ¿çšã¯çæ³çã§ã¯ãããŸããããã€ã³ã©ã€ã³ã®object-fit/object-position
ã¹ã¿ã€ã«ããªãŒããŒã©ã€ãããããã«å¿ èŠã§ããgatsby-imageãèšå®ãããé«ãã®é åãã«ããŒããŠããªãéãã
object-fit
ããã³object-position
ããããã£ã調æŽããå¿ èŠããªãããšã«æ³šæããŠãã ããã ãããã®ãŠãŒã¹ã±ãŒã¹ã§ã¯ãéåžžãobject-fit: cover;
ã¯åŒãç¶ãæ©èœããobject-position
å€ã埮調æŽããå¿ èŠããããŸãïŒgatsby-imageã¯ããã©ã«ãã§center center
ã«èšå®ããŸãïŒã2. object-fit / object-positionã«IE9 +ããªãã£ã«ãè¿œå ããŸã
äžèšã®ã¹ã¿ã€ã«ã¯ã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
è¿œå ããŸãã泚ïŒç§ã¯ããªãã£ã«ãã¢ã¯ãã£ãã«
onInitialClientRender
ããªãã£ã«ã®ããã®åœä»€ã掻æ§åé»è©±ããããããã«ãã"ã®åã«</body>
ããŸãã¯_on DOM ready_"ã ä»ã®å Žæã§ãç§ãèŠã@KyleAMathewsã¯polyfillsãå®è£ ããããšããå§ãããŸãonClientEntry
ãããè¯ãã§ãããå Žåãç§ã¯ãªããšç¢ºä¿¡ããŠããã®ã§ã代ããã«ïŒä»»æã®ã³ã¡ã³ããã«ã€ã«ïŒïŒãã圹ã«ç«ãŠã°å¹žãã§ãã