Portfólio 3D
Responsivo
Talvez você tenha temido este momento, mas é hora de tornar nosso site responsivo!
Agora, precisamos recriar tudo o que fizemos para a versão desktop, mas para dispositivos móveis!
Brincadeira 🤭, vamos usar algumas técnicas para fazer nossa cena 3D ficar boa em dispositivos móveis.
Gostaria de destacar que não existe uma solução perfeita para tornar uma cena 3D responsiva. Isso depende de muitos fatores:
- A complexidade da cena
- O número de elementos
- Desempenho
- O que você deseja alcançar
Para a parte de CSS, vamos tornar nosso site responsivo com facilidade usando media queries.
useMobile
Usaremos duas técnicas para tornar nossa cena 3D responsiva:
- Alterar a posição base e a escala dos itens com base na largura disponível. Após um determinado limite, mudaremos para uma versão móvel.
- Ajustar com precisão a posição e a escala dos itens com base em um
scaleFactor
. Nossa cena parece perfeita em uma tela de1980px
, mas e em uma tela de1600px
? Usaremos umscaleFactor
para ajustar a posição e a escala dos itens, mantendo a mesma aparência.
Vamos criar um hook useMobile
na pasta src/hooks
para lidar com ambas as técnicas:
import { useState } from "react"; const REFERENCE_WIDTH = 1920; const MOBILE_THRESHOLD = 990; export const useMobile = () => { const [scaleFactor, setScaleFactor] = useState( window.innerWidth / REFERENCE_WIDTH ); const [isMobile, setIsMobile] = useState( window.innerWidth <= MOBILE_THRESHOLD ); return { scaleFactor, isMobile, }; };
Estamos usando o hook useState
para armazenar os valores de scaleFactor
e isMobile
. Isso forçará uma re-renderização quando os valores mudarem.
Usamos duas constantes para definir a largura ideal que usamos para posicionar nossos itens e o limite para a versão móvel (quando mudamos para a versão móvel).
Escolhi não usar a config
para essas variáveis
para tornar este hook reutilizável em outros projetos.
React Three Fiber: The Ultimate Guide to 3D Web Development
✨ You have reached the end of the preview ✨
Go to the next level with Three.js and React Three Fiber!
Get full access to this lesson and the complete course when you enroll:
- 🔓 Full lesson videos with no limits
- 💻 Access to the final source code
- 🎓 Course progress tracking & completion
- 💬 Invite to our private Discord community
One-time payment. Lifetime updates included.