美文网首页
[CSS] 瀑布流排版

[CSS] 瀑布流排版

作者: JellyL | 来源:发表于2024-02-01 13:43 被阅读0次

需求

多个卡片,宽度一样,按瀑布流排列,每个元素依次加入到最短的那一列

实现方案

interface WaterfallsProps {
  heights: number[];
  columns: number;
}

interface AutoGridRowSpecialUnitProps {
  height: number;
  index: number;
}

const AutoGridRowSpecialUnit: React.FC<AutoGridRowSpecialUnitProps> = ({
 height,
 index,
}) => {
  const containerRef = useRef<HTMLDivElement | null>(null);

  useEffect(() => {
    const container = containerRef.current;
    if (container) {
      container.style.gridRow = `span ${Math.ceil(container.offsetHeight)}`;
    }
  }, []);

  return (
    <div id={index} ref={containerRef} className="border-aux-1 border-2 mb-1 mx-1">
        <div
          style={{ height }}
          className="bg-pri-1 text-white-1 flex justify-center items-center"
        >
          {index}
        </div>
    </div>
  );
}

export const GridWaterfalls: React.FC<WaterfallsProps> = ({
  heights,
  columns,
}) => {

  return (
      <div className={`w-[320px] grid`} style={{ gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`}}>
        {
          heights.map((height, index) => (
            <AutoGridRowSpecialUnit key={index} height={height} index={index} />
          ))
        }
      </div>
  );
};

export const Component = () => {
  const heights = [
    100,
    160,
    400,
    30,
    83,
    45,
    200
  ].sort((a, b) => Math.random() > 0.5 ? 1 : -1);

  return (
    <div className="w-full h-[100vh] flex items-center justify-center">   
      <GridWaterfalls heights={heights} columns={2} />
      <GridWaterfalls heights={heights} columns={3} />
    </div>
  );
};

实现效果:


瀑布流

竖向排版(适合用于论文或新闻排版的方式):

interface WaterfallsProps {
  heights: number[];
  columns: number;
}

export const Waterfalls: React.FC<WaterfallsProps> = ({ heights, columns }) => {

  return (
      <div
        className="w-[320px]"
        style={{
          columnCount: columns,
          columnGap: 10,
          columnFill: "revert-layer"
        }}
      >
        {
          heights.map((height, index) => (
            <div id={index} key={index} className="border-aux-1 border-2">
              <div
                style={{ height }}
                className="bg-pri-1 text-white-1 flex justify-center items-center"
              >
                {index}
              </div>
            </div>
          ))
        }
      </div>
  );
};

export const Component = () => {
  const heights = [
    100,
    160,
    400,
    30,
    83,
    45,
    200
  ].sort((a, b) => Math.random() > 0.5 ? 1 : -1);

  return (
    <div className="w-full h-[100vh] flex items-center justify-center">   
        <Waterfalls heights={heights} columns={2} />
        <Waterfalls heights={heights} columns={3} />  
    </div>
  );
};

实现效果:


竖向排版

相关文章

  • 照片瀑布流排版

    一.利用filter 标签(简单,但影响运行) html 分析 整个页面分为行,且每行想紧凑,当每列和每行之间没有...

  • 图片瀑布流

    使用CSS3中的多列完成瀑布流 HTML CSS 展示:

  • 2022-04-19 纯 CSS 实现瀑布流式排版

    2022-04-19 纯 CSS 实现瀑布流式排版[https://www.jianshu.com/p/36061...

  • 纯css3瀑布流布局

    CSS3瀑布流 /*大层*/ .container{wi...

  • css 完成瀑布流

    HTML部分 CSS部分,还用了媒体查询,column-count 列数你可以自己根据需要设置

  • 瀑布流css实现

    父元素设置 flex布局实现父元素:display:flex;横向排列flex-flow:column wrap ...

  • css快速实现瀑布流

    css有提供可以实现瀑布流的样式 父盒子设置column-count : 2 列数就可以直接实现瀑布流 ,此时最后...

  • 瀑布流实现的3种方式

    css的multi-columns 写法 html: css: box:是瀑布流的容器:在容器里面column-c...

  • 10. CSS 排版

    1、标准流(文档流/普通流) 默认排版 CSS的元素分为块级、行内、行内块级 块级是垂直排版,行内、行内块级是水平...

  • js/jQuery实现瀑布流

    html中主要代码: 实现瀑布流的js代码: css实现瀑布流只需要三行代码: 实现下拉刷新的js代码: js/c...

网友评论

      本文标题:[CSS] 瀑布流排版

      本文链接:https://www.haomeiwen.com/subject/nuczodtx.html