响应式示例, 图片自然放大缩小

总结下响应式该如何处理。
一、有图片时图片直接设置 width 100%; 关键点:如果是Flex布局中是要用好flex属性, 如果它是1, 那图片就会占满当前的容器,随容器大小来变化。Grid 布局用的少,直接的width 100%貌似也可以。
二、图片可以加上minWidth 属性来控制最小显示时该占有的宽度。
三、有二维的布局时要考虑使用Grid, 即两行两行或以上的情况。
四、Flex 布局当图片src地址失效后是不占宽高的, 但Grid布局占高宽,看下图


image.png

使用chakra-ui 的 demo, 代码如下:
index.jsx:

import {
  Box,
  Flex,
  Image,
  Text,
  Grid,
  GridItem,
  useBreakpointValue,
} from '@chakra-ui/react';
import { Eyebrow, Headline, CTAButton } from './index.styles';
const Demo = ({
  eyebrow,
  headline,
  body,
  CTA1,
  CTA2,
  largeImgSrc,
  largeImgAlt,
  smallImages,
  bgcolor,
}) => {
  const layout = useBreakpointValue({
    base: 'column',
    md: bgcolor ? (largeImgSrc ? 'column' : 'row') : 'row',
    lg: 'row',
  });

  return (
    <Flex
      direction={layout}
      justify={'center'}
      align={'center'}
      backgroundColor={bgcolor}
      p={bgcolor ? '20px' : 0}
      borderRadius={{ base: '4px', lg: '8px' }}
      id="collageComponentWrap"
      gap={'12px'}
    >
      <Box
        id="firstSection"
        w={'100%'}
        alignSelf={{ md: !largeImgSrc ? 'center' : 'flex-start', lg: 'center' }}
        flex={{ base: 1, md: 1 }}
      >
        <Flex
          width={{ base: '100%' }}
          display="column"
          justifyContent="center"
          align={'left'}
          pt="12px"
          id="collageTextSection"
        >
          {eyebrow && largeImgSrc && (
            <Eyebrow id="eyebrow" fontSize={bgcolor ? '18px' : '16px'}>
              {eyebrow}
            </Eyebrow>
          )}
          {headline && (
            <Headline
              id="headline"
              fontSize={!largeImgSrc ? '32px' : '24px'}
              fontWeight={!largeImgSrc ? 900 : 400}
            >
              {headline}
            </Headline>
          )}
          {body && <Text id="bodyText">{body}</Text>}
        </Flex>
        <Flex my={'12px'} dir="row" justify={'flex-start'} gap={'12px'} flexWrap={'wrap'}>
          {CTA1?.label && (
            <CTAButton
              as="a"
              href={CTA1?.href}
              id="CTA1"
              color={CTA1?.color || 'inherit'}
              borderColor={CTA1?.borderColor}
            >
              {CTA1?.label}
            </CTAButton>
          )}
          {CTA2?.label && (
            <CTAButton
              as="a"
              href={CTA2?.href}
              id="CTA2"
              color={CTA2?.color || 'inherit'}
              borderColor={CTA2?.borderColor}
            >
              {CTA2?.label}
            </CTAButton>
          )}
        </Flex>
      </Box>
      <Flex
        id="collageImageSection"
        direction={{ base: 'column', md: 'row' }}
        width={{ base: '100%' }}
        gap={'20px'}
        justify={{ base: 'center', md: 'flex-start' }}
        align={{ base: 'center' }}
        flex={{ base: 2, md: largeImgSrc ? 2 : 1, lg: 2 }}
      >
        {largeImgSrc && (
          <Box id="bigImage" flex={1} w={'100%'}>
            <Image
              src={largeImgSrc}
              alt={largeImgAlt}
              borderRadius={'8px'}
              objectFit={'cover'}
              width={'100%'}
              minWidth={'196px'}
            />
          </Box>
        )}
        <Grid
          id="smallImagesGroup"
          templateRows={{
            base: 'repeat(2, 1fr)',
            lg: largeImgSrc ? 'repeat(2, 1fr)' : 'unset',
          }}
          templateColumns={{
            base: 'repeat(2, 1fr)',
            lg: largeImgSrc ? 'repeat(2, 1fr)' : 'repeat(4, 1fr)',
          }}
          gap={4}
          flex={1}
          w={'100%'}
        >
          {smallImages?.map((img, index) => (
            <GridItem key={index}>
              <Image
                src={img.src}
                alt={img.alt}
                key={index}
                width={'100%'}
                // maxWidth={'205px'}
                minWidth={'89px'}
              />
            </GridItem>
          ))}
        </Grid>
      </Flex>
    </Flex>
  );
};
export default Demo;

index.styles.js

import { Box, Button } from '@chakra-ui/react';
import styled from '@emotion/styled';

export const Eyebrow = styled(Box)`
  font-weight: 700;
`;

export const Headline = styled(Box)`
  font-family: Gelica;
  font-size: ${(props) => props?.fontSize || 'inherit'};
  line-height: 120%;
`;

export const CTAButton = styled(Button)`
  border-radius: 28px;
  min-width: 52px;
  border: 2px solid #1c1c1c;
  background: #fff;
  padding: 12px 20px;
  border-color: ${(props) => props?.borderColor || 'inherit'};
`;

推荐一篇 Flex布局的技术文章,可以交互直接看效果,链接:An Interactive Guide to Flexbox. 这些东西都是打基础,了解后直接干就好

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容