Gatsby: рдХреНрдпрд╛ [gatsby-image] рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдЗрдореЗрдЬ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 16 рдЕрдХреНрддреВре░ 2017  ┬╖  22рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: gatsbyjs/gatsby

рд▓рд╡рд┐рдВрдЧ рдЧреИрдЯреНрд╕рдмреА рдФрд░ [рдЧреИрдЯреНрд╕рдмреА-рдЗрдореЗрдЬ] рдШрдЯрдХ!

рдХреНрдпрд╛ рдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рднреА [gatsby-image] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ? рдореИрдВ рдЕрдХреНрд╕рд░ рдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╡рд┐ ( background-size: cover ) рдХреЗ рд╕рд╛рде рдкреГрд╖реНрда рдЕрдиреБрднрд╛рдЧ рдмрдирд╛рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП [gatsby-image] рдХреА рдСрдЯреЛ-рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдФрд░ рдЕрдиреБрдХреВрд▓рди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред

(рдпрджрд┐ [gatsby-image] рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЗрд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ background-size: cover рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?)

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рдХреБрдЫ рдкреНрд░рдпреЛрдЧ рдХрд┐рдП рд╣реИрдВ рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЧреИрдЯреНрд╕рдмреА-рдЗрдореЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдв рд▓рд┐рдпрд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЕрдЯрдХреЗ рд╣реБрдП рдХрд┐рд╕реА рдФрд░ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЧреИрдЯреНрд╕рдмреА-рдЗрдореЗрдЬ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдХреЗрд╡рд▓ рдЗрдирд▓рд╛рдЗрди рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╣реИрдВ!

рдпрд╣рд╛рдБ рдореЗрд░реЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ:

1. рд╕реАрдПрд╕рдПрд╕ рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдЬреЛрдбрд╝реЗрдВ

рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдЧреИрдЯреНрд╕рдмреА-рдЗрдореЗрдЬ рдШрдЯрдХ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 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>

рд╕реАрдзреЗ рдЧреИрдЯреНрд╕рдмреА-рдЗрдореЗрдЬ рдкрд░ рд╕реЗрдЯ рдХреА рдЧрдИ рд╢реИрд▓рд┐рдпрд╛рдБ <div class="gatsby-image-wrapper> рд▓рд╛рдЧреВ рд╣реЛрдВрдЧреАред рдЬрд┐рди рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд╣рдо рдЫрд╡рд┐ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ <img> рдЯреИрдЧ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд▓ рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЧреИрдЯреНрд╕рдмреА-рдЗрдореЗрдЬ рдХреЛ рд╕реАрдПрд╕рдПрд╕ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдЗрдореЗрдЬ рдХреА рддрд░рд╣ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ (рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдЧреИрдЯреНрд╕рдмреА-рдкреНрд▓рдЧрдЗрди-рд╕реНрдЯрд╛рдЗрд▓-рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ):

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 рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ object-fit рдФрд░ object-position рдЧреБрдгреЛрдВ рдХреЛ рддрдм рддрдХ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА рдЬрдм рддрдХ рдХрд┐ рдЧреИрдЯреНрд╕рдмреА-рдЗрдореЗрдЬ рдПрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдКрдВрдЪрд╛рдИ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдХрд╡рд░ рди рдХрд░реЗред рдЗрди рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, object-fit: cover; рдЖрдорддреМрд░ рдкрд░ рдЕрднреА рднреА рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдХреЗрд╡рд▓ object-position рдорд╛рди рдХреЛ рдЯреНрд╡рд┐рдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (gatsby-image рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ center center рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ)ред

2. рдСрдмреНрдЬреЗрдХреНрдЯ-рдлрд┐рдЯ/рдСрдмреНрдЬреЗрдХреНрдЯ-рдкреЛрдЬрд┐рд╢рди рдХреЗ рд▓рд┐рдП IE9+ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдЬреЛрдбрд╝реЗрдВ

рдКрдкрд░ рджреА рдЧрдИ рд╢реИрд▓рд┐рдпрд╛рдБ IE рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдВрдЧреА (рджреЗрдЦреЗрдВ caniuse.com: object-fit/object-position )ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, IE рдореЗрдВ, object-fit/object-position рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╕реЗрдЯ рдКрдВрдЪрд╛рдИ рд╡рд╛рд▓реА рдХреЛрдИ рднреА рдкреГрд╖реНрдарднреВрдорд┐-рдЫрд╡рд┐ рдЫрд╡рд┐ рдХреЛ рд╡рд┐рдХреГрдд рдХрд░рддреЗ рд╣реБрдП, рдЗрд╕рдХреЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреИрд▓ рдЬрд╛рдПрдЧреАред

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рд╣реИ рдЬреЛ рдЗрд╕реЗ IE9+ рдореЗрдВ рдареАрдХ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рдпрд╣рд╛рдБ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред (рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @fk рдХреЛ рдзрдиреНрдпрд╡рд╛рджред)

рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

  1. рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ рдЕрдкрдиреЗ CSS рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд font-family рдШреЛрд╖рдгрд╛ рд╢рд╛рдорд┐рд▓ рдХреА рд╣реИ (рдКрдкрд░ рджреЗрдЦреЗрдВ)
  2. рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ: npm install тАФsave object-fit-images
  3. рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЬрдбрд╝ рдореЗрдВ рдПрдХ gatsby-browser.js рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ
  4. рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ gatsby-browser.js :
import objectFitImages from 'object-fit-images'

exports.onInitialClientRender = () => {
  objectFitImages()
}

рдиреЛрдЯ: рдореИрдВрдиреЗ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЛ onInitialClientRender рдореЗрдВ рд╕рдХреНрд░рд┐рдп рдХрд┐рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рд╕рдХреНрд░рд┐рдпрдг рдХреЙрд▓ рдХреЛ " </body> , рдпрд╛ _on DOM рддреИрдпрд╛рд░_" рдкрд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВред рдХрд╣реАрдВ рдФрд░, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ @KyleAMathews рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ onClientEntry рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ (рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА, рдХрд╛рдЗрд▓?)

рдЙрдореНрдореАрдж рд╣реИ рдХреА рд╡реЛ рдорджрдж рдХрд░рджреЗ!

рд╕рднреА 22 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣ рд╕реБрдирдХрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ!

рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдЗрдореЗрдЬ рдкрд░, рдЧреИрдЯреНрд╕рдмреА-рдЗрдореЗрдЬ рдбреЗрдореЛ рд╕рд╛рдЗрдЯ https://using-gatsby-image.gatsbyjs.org/ рджреЗрдЦреЗрдВред

рдХреНрдпрд╛ рдпрд╣реА рддреБрдо рдЪрд╛рд╣рддреЗ рд╣реЛ?

рдЬрд▓реНрджреА рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдмрд╕ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЧреИрдЯреНрд╕рдмреА-рдЗрдореЗрдЬ рдбреЗрдореЛ рд╕рд╛рдЗрдЯ рдкрд░ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ...

  1. background-image рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, gatsby-image рд╣рдореЗрд╢рд╛ <img /> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ position: absolute; рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд┐рдореНрдпреБрд▓реЗрдЯреЗрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
  2. рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕реНрдерд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП background-size/background-position рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, gatsby-image рд╣рдореЗрд╢рд╛ object-fit/object-position рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ?

рдореИрдВ рдЕрдкрдиреА рд╕рднреА рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЧреИрдЯреНрд╕рдмреА-рдЗрдореЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреБрд╢ рд╣реВрдВ, рдЬрдм рддрдХ рдХрд┐ рд╡реЗ рд╕рднреА рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдареАрдХ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ ... рдХреНрдпрд╛ рдЧреИрдЯреНрд╕рдмреА рдореЗрдВ рдЖрдИрдИ 11 рдФрд░ рдПрдЬ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ-рдлрд┐рдЯ/рдСрдмреНрдЬреЗрдХреНрдЯ-рдкреЛрдЬрд┐рд╢рди рдЧреБрдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдЙрдкрд╛рдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВ ( рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдорд░реНрдерди рдореБрджреНрджреЗ рдпрд╣рд╛рдБ рджреЗрдЦреЗрдВ: caniuse.com )?

рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рд╕реАрдПрд╕рдПрд╕ рдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╡рд┐рдпреЛрдВ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рдмрдЪреЗрдВ (рдЧреИрдЯреНрд╕рдмреА рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП)? рдЧреИрдЯреНрд╕рдмреА-рдЗрдореЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдХреНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ-рдлрд┐рдЯ/рдСрдмреНрдЬреЗрдХреНрдЯ-рдкреЛрдЬрд┐рд╢рди рдЧреБрдгреЛрдВ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд╢рдВрд╕рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ?

рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреНрдпрд╛ Gatsby рдореЗрдВ background-size:cover рд╕рд╛рде рдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд╢рдВрд╕рд┐рдд, рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рддрд░реАрдХрд╛ рд╣реИ?

@ooloth рдШрдЯрдХ рдмрд╣реБрдд рдирдпрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рдкреНрд░рд╢реНрди рдХрд╛ рдореЗрд░рд╛ рдЙрддреНрддрд░ рд╣реИ ... рдХреГрдкрдпрд╛ рдЧреИрдЯреНрд╕рдмреА-рдЗрдореЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЦреЗрд▓реЗрдВ рдЬреИрд╕рд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ рдЖрдкрдХреЛ рдорд┐рд▓рддрд╛ рд╣реИ рдЙрд╕реЗ рд╡рд╛рдкрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВ :-)

рд╕реАрдПрд╕рдПрд╕ рдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╡рд┐рдпрд╛рдВ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЖрдкрдХреЛ (рдЖрд╕рд╛рдиреА рд╕реЗ) рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░ рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХрд╛рдзрд┐рдХ рдердВрдмрдиреЗрд▓ рдЖрдХрд╛рд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдЖрдк рдореАрдбрд┐рдпрд╛ рдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рд╕реЗ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рд╛рд╣рд╛ред рд╕рдордЭрд╛ред рдФрд░ рдХрд░реЗрдВрдЧреЗред рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдЕрдЧрд░ рдХреЛрдИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреА:

  1. IE 11 рдФрд░ Edge рдореЗрдВ object-fit/object-position рдХрд╛ рд╕рдорд░реНрдерди рдХреИрд╕реЗ рдХрд░реЗрдВ (рдХреНрдпрд╛ Gatsby рдкрд╣рд▓реЗ рд╕реЗ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ?)
  2. object-fit/object-position рдорд╛рдиреЛрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреИрд╕реЗ рдХрд░реЗрдВ?

1 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, https://github.com/bfred-it/object-fit-images рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ

@fk рдкреЙрд▓реАрдлрд┐рд▓ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! 16 рдЕрдХреНрдЯреВрдмрд░ рддрдХ, рдПрдЬ object-fit/object-position рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди IE11 рдХреЛ рдЕрднреА рднреА рдХреБрдЫ рдорджрдж рдХреА рдЬрд░реВрд░рдд рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдПрдХ рдмрд╛рдд рдкрд░ рд╕рд▓рд╛рд╣ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реВрдВ рдХрд┐ рдкреЙрд▓реАрдлрд┐рд▓ рдХреЛ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдП ...
npm install --save object-fit-images
import objectFitImages from 'object-fit-images'

..рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдХреНрд░рд┐рдпрдг рдХреЙрд▓ рдХрд╣рд╛рдВ рд░рдЦрд╛ рдЬрд╛рдП:
objectFitImages()

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рдХрд╣рд╛рдБ рд░рдЦрд╛ рдЬрд╛рдП? рдореИрдВ рд░рд┐рдПрдХреНрдЯ рдФрд░ рдЧреИрдЯреНрд╕рдмреА рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдирдпрд╛ рд╣реВрдБред

(рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ-рдлрд┐рдЯ/рдСрдмреНрдЬреЗрдХреНрдЯ-рдкреЛрдЬрд┐рд╢рди рдорд╛рдиреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЬреИрд╕реЗ рд╣реА рдореИрдВрдиреЗ рдкреЙрд▓реАрдлрд┐рд▓ рдФрд░ рдЙрд╕рдХреЗ рд╕реАрдПрд╕рдПрд╕ рд╕рдорд╛рдпреЛрдЬрди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рдЙрд╕ рдХреЛрдб рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛ред)

рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рдХреБрдЫ рдкреНрд░рдпреЛрдЧ рдХрд┐рдП рд╣реИрдВ рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЧреИрдЯреНрд╕рдмреА-рдЗрдореЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдв рд▓рд┐рдпрд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЕрдЯрдХреЗ рд╣реБрдП рдХрд┐рд╕реА рдФрд░ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЧреИрдЯреНрд╕рдмреА-рдЗрдореЗрдЬ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдХреЗрд╡рд▓ рдЗрдирд▓рд╛рдЗрди рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╣реИрдВ!

рдпрд╣рд╛рдБ рдореЗрд░реЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ:

1. рд╕реАрдПрд╕рдПрд╕ рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдЬреЛрдбрд╝реЗрдВ

рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдЧреИрдЯреНрд╕рдмреА-рдЗрдореЗрдЬ рдШрдЯрдХ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 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>

рд╕реАрдзреЗ рдЧреИрдЯреНрд╕рдмреА-рдЗрдореЗрдЬ рдкрд░ рд╕реЗрдЯ рдХреА рдЧрдИ рд╢реИрд▓рд┐рдпрд╛рдБ <div class="gatsby-image-wrapper> рд▓рд╛рдЧреВ рд╣реЛрдВрдЧреАред рдЬрд┐рди рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд╣рдо рдЫрд╡рд┐ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ <img> рдЯреИрдЧ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд▓ рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЧреИрдЯреНрд╕рдмреА-рдЗрдореЗрдЬ рдХреЛ рд╕реАрдПрд╕рдПрд╕ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдЗрдореЗрдЬ рдХреА рддрд░рд╣ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ (рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдЧреИрдЯреНрд╕рдмреА-рдкреНрд▓рдЧрдЗрди-рд╕реНрдЯрд╛рдЗрд▓-рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ):

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 рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ object-fit рдФрд░ object-position рдЧреБрдгреЛрдВ рдХреЛ рддрдм рддрдХ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА рдЬрдм рддрдХ рдХрд┐ рдЧреИрдЯреНрд╕рдмреА-рдЗрдореЗрдЬ рдПрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдКрдВрдЪрд╛рдИ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдХрд╡рд░ рди рдХрд░реЗред рдЗрди рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, object-fit: cover; рдЖрдорддреМрд░ рдкрд░ рдЕрднреА рднреА рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдХреЗрд╡рд▓ object-position рдорд╛рди рдХреЛ рдЯреНрд╡рд┐рдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (gatsby-image рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ center center рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ)ред

2. рдСрдмреНрдЬреЗрдХреНрдЯ-рдлрд┐рдЯ/рдСрдмреНрдЬреЗрдХреНрдЯ-рдкреЛрдЬрд┐рд╢рди рдХреЗ рд▓рд┐рдП IE9+ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдЬреЛрдбрд╝реЗрдВ

рдКрдкрд░ рджреА рдЧрдИ рд╢реИрд▓рд┐рдпрд╛рдБ IE рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдВрдЧреА (рджреЗрдЦреЗрдВ caniuse.com: object-fit/object-position )ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, IE рдореЗрдВ, object-fit/object-position рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╕реЗрдЯ рдКрдВрдЪрд╛рдИ рд╡рд╛рд▓реА рдХреЛрдИ рднреА рдкреГрд╖реНрдарднреВрдорд┐-рдЫрд╡рд┐ рдЫрд╡рд┐ рдХреЛ рд╡рд┐рдХреГрдд рдХрд░рддреЗ рд╣реБрдП, рдЗрд╕рдХреЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреИрд▓ рдЬрд╛рдПрдЧреАред

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рд╣реИ рдЬреЛ рдЗрд╕реЗ IE9+ рдореЗрдВ рдареАрдХ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рдпрд╣рд╛рдБ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред (рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @fk рдХреЛ рдзрдиреНрдпрд╡рд╛рджред)

рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

  1. рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдиреЗ рдЕрдкрдиреЗ CSS рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд font-family рдШреЛрд╖рдгрд╛ рд╢рд╛рдорд┐рд▓ рдХреА рд╣реИ (рдКрдкрд░ рджреЗрдЦреЗрдВ)
  2. рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ: npm install тАФsave object-fit-images
  3. рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЬрдбрд╝ рдореЗрдВ рдПрдХ gatsby-browser.js рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ
  4. рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ gatsby-browser.js :
import objectFitImages from 'object-fit-images'

exports.onInitialClientRender = () => {
  objectFitImages()
}

рдиреЛрдЯ: рдореИрдВрдиреЗ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЛ onInitialClientRender рдореЗрдВ рд╕рдХреНрд░рд┐рдп рдХрд┐рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рд╕рдХреНрд░рд┐рдпрдг рдХреЙрд▓ рдХреЛ " </body> , рдпрд╛ _on DOM рддреИрдпрд╛рд░_" рдкрд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВред рдХрд╣реАрдВ рдФрд░, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ @KyleAMathews рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ 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 рдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╡реЗ рд▓рд╛рдн рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред

@oolot рдЗрд╕реЗ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЧреИрдЯреНрд╕рдмреА рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рдпрд╣рд╛рдБред рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЫрд╡рд┐ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд╣рд╛рдВ рд╣реИ?

@ fucata55 рдореЗрд░реА рдЦреБрд╢реА!

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЫрд╡рд┐ рдХреБрдЫ рдРрд╕реА рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдкрд╣рд▓реЗ рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреВрдЫрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЕрдкрдиреЗ gatsby-image рдШрдЯрдХ рдХреЗ fluid рдпрд╛ fixed рдкреНрд░реЛрдк (рдпрд╛ рдпрджрд┐ v1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ sizes рдпрд╛ resolutions рдкреНрд░реЛрдк)ред

рддрдм gatsby-image рдШрдЯрдХ рдЙрд╕ рдЫрд╡рд┐ рдХреА рд╕рднреА рдкреНрд░рддрд┐рдпрд╛рдБ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдореА HTML рдореЗрдВ <img /> рдореЗрдВ рдЬрдЯрд┐рд▓ sizes рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред

gatsby-image (рдФрд░ рдЗрд╕реЗ рдПрдХ рдЫрд╡рд┐ рднреЗрдЬреЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкреВрд░реНрд╡рд╛рднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП, gatsby-image рдбреЙрдХреНрд╕ рдпрд╣рд╛рдВ v2 рдХреЗ рд▓рд┐рдП рдпрд╛ рдпрд╣рд╛рдВ v1 рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ (рд╡реЗ рдорд╣рд╛рди рд╣реИрдВ)ред

@oolot рдЖрдкрдХрд╛ рдХрд╛рдо рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд░рд╣рд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ "рдкреГрд╖реНрдарднреВрдорд┐-рдЕрдиреБрд▓рдЧреНрдирдХ: рдирд┐рд╢реНрдЪрд┐рдд;" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╣рд╛рдВред рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рд╕рдлрд╛рд░реА рдХреЗ рд╕рд╛рде рдирд╣реАрдВред рдЬрдм рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╣ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рддрдХ рдореИрдВ рдкреГрд╖реНрда рдореЗрдВ рдФрд░ рдШрдЯрдХ рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ рддрдм рддрдХ рдЫрд╡рд┐ рдЕрдЪреНрдЫреА рд▓рдЧрддреА рд╣реИред рдЬрд┐рддрдиреЗ рдЕрдзрд┐рдХ рдШрдЯрдХ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЪрд┐рддреНрд░ рдЙрддрдирд╛ рд╣реА рдмрдбрд╝рд╛ рд╣реЛрддрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ, рдлрд┐рд░ рдореИрдВ рд╕рдлрд╛рд░реА рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдкреЙрд▓реАрдлрд┐рд▓ рдХрд░рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдлрд┐рд░ "рдкреГрд╖реНрдарднреВрдорд┐-рдЕрдиреБрд▓рдЧреНрдирдХ: рдирд┐рд╢реНрдЪрд┐рдд;" рдЕрдм рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдорджрдж рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреАред

@zachgaskin рдХрд╛рд╢ рдореИрдВ рдорджрдж рдХрд░ рдкрд╛рддрд╛!

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╢рд╛рдпрдж рдПрдХ CSS рдореБрджреНрджрд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд Gatsby рдпрд╛ gatsby-image рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ) рдФрд░ рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдореБрдЭреЗ background-attachment: fixed рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдкрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдкреБрди: рд╡рд░реНрдгрди рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдиреНрдпреВрдирддрдо рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

caniuse.com рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЖрдИрдУрдПрд╕ рд╕рдлрд╛рд░реА background-attachment: fixed рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдХреЛрдЬрд╝ рд╕рдлрд╛рд░реА рдХреЛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЪрд╛рд╣рд┐рдП ...)ред

рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджрд░реНрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХ рд╣реА рд╕реАрдПрд╕рдПрд╕ рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдХреНрдпреЛрдВ рдорд╛рдирддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдореЗрд░реА рд╕рд╣рд╛рдиреБрднреВрддрд┐ рд╣реИред рдЖрдкрдХреЛ рдХрд╛рдордпрд╛рдмреА рдорд┐рд▓реЗ!

@zachgaskin @ooloth рдореИрдВ рдЗрд╕ рдкрд░ рднреА рдЖрдпрд╛ рд╣реВрдВред рдпрд╣ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдЬрд┐рд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рд╣реВрдВ рд╡рд╣ рдЫрд╡рд┐ рдореЗрдВ position: 'fixed' рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкреВрд░реЗ рдкреГрд╖реНрда рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рд╣реИред рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣рд░ рдЬрдЧрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреГрд╖реНрдарднреВрдорд┐ рд╣реИред z-index: -1 рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдпрд╣ рдЖрдкрдХреА рдЕрдиреНрдп рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдкреАрдЫреЗ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИред

<Img
  sizes={dataSizes}
  style={{
    position: "fixed",
    left: 0,
    top: 0,
    width: "100%",
    height: "100%",
    z-index: -1
  }}
/>

рдЖрдкрдХреЛ рдЖрдИрдИ рдкреЙрд▓реАрдлрд┐рд▓ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдЧреИрдЯреНрд╕рдмреА-рдЗрдореЗрдЬ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреА рд╢реИрд▓рд┐рдпреЛрдВ рдореЗрдВ ! рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдСрдмреНрдЬреЗрдХреНрдЯрдлрд┐рдЯ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреЛрдЬреАрд╢рди рдХреЛ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

import Img from 'gatsby-image/withIEPolyfill'

<Img
      fixed={heroImage.childImageSharp.fixed}
      style={{ width: '100%', height: '100%' }}
      objectFit="cover"
      objectPosition="bottom left"
   />

рдзрдиреНрдпрд╡рд╛рдж, @AronBe

рдореИрдВ рдЗрд╕ рд╕рдордп рдЧреИрдЯреНрд╕рдмреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╡реАрдирддрдо рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ; рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЧреИрдЯреНрд╕рдмреА рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдЗрдореЗрдЬ (рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд) рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рдЖрдЦрд┐рд░реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдореЗрд░реЗ рд▓рд┐рдП рдЪрд╛рд▓ рдЪрд▓реАред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕