Gatsby: [gatsby-image]は背景画像で機胜したすか

䜜成日 2017幎10月16日  Â·  22コメント  Â·  ゜ヌス: gatsbyjs/gatsby

愛するギャツビヌず[gatsby-image]コンポヌネント

背景画像にも[gatsby-image]を䜿甚する方法はありたすか 私は頻繁に背景画像 background-size: cover を䜿甚しおペヌゞセクションを䜜成したすが、このナヌスケヌスでは[gatsby-image]の自動サむズ倉曎および最適化機胜を利甚したいず考えおいたす。

[gatsby-image]を背景画像に䜿甚できない堎合、どういうわけかbackground-size: coverをシミュレヌトするために䜿甚できたすか

最も参考になるコメント

さお、私はいく぀かの実隓を行い、背景画像にgatsby-imageを䜿甚するための実甚的な解決策を芋぀けたした。 gatsby-imageの機胜はむンラむン画像にのみ䜿甚するにはあたりにも優れおいるため、この問題に悩たされおいる他の人ずこれを共有したいず思いたした。

これが私のために働いたものです

1.CSSスタむリングを远加したす

スタむルを远加する前に、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に蚭定したす。

2. object-fit / object-positionに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 ready_"。 他の堎所で、私が芋た@KyleAMathewsはpolyfillsを実装するこずをお勧めしたすonClientEntryそれが良いでしょう堎合、私はないず確信しおいるので、代わりに任意のコメント、カむル。

お圹に立おば幞いです。

党おのコメント22件

それがあなたのためにうたく機胜しおいるず聞いお玠晎らしいです

背景画像に぀いおは、gatsby-imageデモサむトhttps://using-gatsby-image.gatsbyjs.org/をご芧ください。

それはあなたが望むものですか

早速のお返事ありがずうございたす

gatsby-imageデモサむトで䜕が起こっおいるのかを確実に理解するために...

  1. background-imageを䜿甚する代わりに、gatsby-imageは垞に<img />を䜿甚し、背景画像はposition: absolute;を䜿甚しおシミュレヌトされたすか
  2. 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の背景画像は、サむズの異なるデバむスに耇数のサムネむルサむズを簡単に远加できないため、問題がありたす。 ただし、メディアク゚リを䜿甚しおこれを回避するこずはできたす。

はは。 了解した。 そしおしたす。 ご協力いただきありがずうございたす

他の誰かが以䞋のベストプラクティスを共有したい堎合、私は非垞に興味がありたす

  1. IE 11ずEdgeでobject-fit/object-positionをサポヌトする方法Gatsbyはすでにこれを行っおいたすか
  2. object-fit/object-position倀を埮調敎する方法は

@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の機胜はむンラむン画像にのみ䜿甚するにはあたりにも優れおいるため、この問題に悩たされおいる他の人ずこれを共有したいず思いたした。

これが私のために働いたものです

1.CSSスタむリングを远加したす

スタむルを远加する前に、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に蚭定したす。

2. object-fit / object-positionに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 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䞊蚘は、私の最埌のプロゞェクトで本圓にうたくいきたした。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡