Anonymous
Как перекрывать адаптивные фоновые изображения CSS [закрыто]
Сообщение
Anonymous » 30 июн 2024, 10:35
У меня возникла проблема с тем, чтобы два фоновых изображения были адаптивными и имели правильное соотношение сторон. В настоящее время фоновые изображения не отображаются, но когда я экспериментировал с добавлением фиксированной ширины и высоты, это работало, но мне это не нужно, потому что тогда оно не реагирует.
Я бы хотел установите максимальную ширину и максимальную высоту для первого (ширина: 526 пикселей, высота: 521 пикселей) и второго изображения (ширина: 308 пикселей, высота: 412 пикселей), чтобы они не становились слишком большими на больших экранах.
Код: Выделить всё
import React, { useState } from "react";
import styled from "@emotion/styled";
const navigationDefault = [
{
media: [
{
backgroundColor: { key: "--color-background-1" },
backgroundImage: {
src: "https://plus.unsplash.com/premium_photo-1673461703605-0c6cc77e1a35?q=80&w=2487&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",
alt: "First image",
},
},
{
backgroundColor: { key: "--color-background-1" },
backgroundImage: {
src: "https://images.unsplash.com/photo-1448375240586-882707db888b?q=80&w=2370&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D",
alt: "First image",
},
},
],
},
];
const BlockWrapper = styled("div")`
width: 100%;
height: 500px;
display: flex;
border: 1px solid blue;
`;
const HeadingWrapper = styled("div")`
margin-bottom: 38px;
`;
const LinkWrapper = styled("div")`
padding-bottom: 16px;
`;
const Links = styled("div")``;
const MediaWrapper = styled("div")``;
const BackgroundWrapper = styled("div")`
display: none;
max-width: 100%;
&.show-media {
display: block;
position: absolute;
&:first-child {
left: 50%;
width: 100%;
padding-top: 100%; /* 1:1 aspect ratio */
z-index: 1;
border: 1px solid red;
}
&:last-child {
width: 30%;
padding-top: 45%; /* 2:3 aspect ratio */
z-index: 2;
border: 1px solid green;
}
}
`;
const Background = styled("div")`
background-image: url(${(props) => props.src});
background-size: cover;
width: 100%;
height: 100%;
background-position: 50% 50%;
background-repeat: no-repeat;
`;
export default function App() {
const defaultMediaId = "default-media";
const [activeId, setActiveId] = useState(defaultMediaId);
const handleMouseEnter = (id) => setActiveId(id);
const handleMouseLeave = () => setActiveId(defaultMediaId);
const renderMedia = (media, id) => (
{media &&
media.map((mediaItem, index) => (
))}
);
return (
Heading
{navigationData.map(({ id, src, label }, index) => (
[url={src}
active={activeId === id}
onMouseEnter={() =] handleMouseEnter(id)}
onMouseLeave={handleMouseLeave}
>
{label}
[/url]
))}
{navigationDefault.map((defaultMedia, index) =>
renderMedia(defaultMedia.media, defaultMediaId)
)}
);
}
Есть советы?
Вот моя песочница, если она чем-то поможет, и вот схема того, как я пытаюсь ее выглядеть:
Дизайн макета
Подробнее здесь:
https://stackoverflow.com/questions/786 ... images-css
1719732907
Anonymous
У меня возникла проблема с тем, чтобы два фоновых изображения были адаптивными и имели правильное соотношение сторон. В настоящее время фоновые изображения не отображаются, но когда я экспериментировал с добавлением фиксированной ширины и высоты, это работало, но мне это не нужно, потому что тогда оно не реагирует. Я бы хотел установите максимальную ширину и максимальную высоту для первого (ширина: 526 пикселей, высота: 521 пикселей) и второго изображения (ширина: 308 пикселей, высота: 412 пикселей), чтобы они не становились слишком большими на больших экранах.[code]import React, { useState } from "react"; import styled from "@emotion/styled"; const navigationDefault = [ { media: [ { backgroundColor: { key: "--color-background-1" }, backgroundImage: { src: "https://plus.unsplash.com/premium_photo-1673461703605-0c6cc77e1a35?q=80&w=2487&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", alt: "First image", }, }, { backgroundColor: { key: "--color-background-1" }, backgroundImage: { src: "https://images.unsplash.com/photo-1448375240586-882707db888b?q=80&w=2370&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", alt: "First image", }, }, ], }, ]; const BlockWrapper = styled("div")` width: 100%; height: 500px; display: flex; border: 1px solid blue; `; const HeadingWrapper = styled("div")` margin-bottom: 38px; `; const LinkWrapper = styled("div")` padding-bottom: 16px; `; const Links = styled("div")``; const MediaWrapper = styled("div")``; const BackgroundWrapper = styled("div")` display: none; max-width: 100%; &.show-media { display: block; position: absolute; &:first-child { left: 50%; width: 100%; padding-top: 100%; /* 1:1 aspect ratio */ z-index: 1; border: 1px solid red; } &:last-child { width: 30%; padding-top: 45%; /* 2:3 aspect ratio */ z-index: 2; border: 1px solid green; } } `; const Background = styled("div")` background-image: url(${(props) => props.src}); background-size: cover; width: 100%; height: 100%; background-position: 50% 50%; background-repeat: no-repeat; `; export default function App() { const defaultMediaId = "default-media"; const [activeId, setActiveId] = useState(defaultMediaId); const handleMouseEnter = (id) => setActiveId(id); const handleMouseLeave = () => setActiveId(defaultMediaId); const renderMedia = (media, id) => ( {media && media.map((mediaItem, index) => ( ))} ); return ( Heading {navigationData.map(({ id, src, label }, index) => ( [url={src} active={activeId === id} onMouseEnter={() =] handleMouseEnter(id)} onMouseLeave={handleMouseLeave} > {label} [/url] ))} {navigationDefault.map((defaultMedia, index) => renderMedia(defaultMedia.media, defaultMediaId) )} ); } [/code] Есть советы? Вот моя песочница, если она чем-то поможет, и вот схема того, как я пытаюсь ее выглядеть: Дизайн макета Подробнее здесь: [url]https://stackoverflow.com/questions/78685666/how-to-overlap-responsive-background-images-css[/url]