提问者:小点点

单击时全屏div


我想创建一个砖石一样的布局,当你点击一个div,然后它的大小调整到全屏,或者至少变得比其他div更大。 比如pinterest,当你点击一张图片时,图片就会变大。 但是在我的代码中,我已经能够为div生成随机的高度和颜色,但是div的宽度太小,当我点击它时,它不能扩展到屏幕的100%。 我还希望它们是可切换的,如果我再次点击一个全屏div,它会回到它的正常大小或随机高度,这将产生。 我在代码里做错了什么?

export default class App extends React.Component {
  constructor(props) {
    super(props);
    this.addActiveClass = this.addActiveClass.bind(this);
    this.state = {
      activeIndex: -1
    };
  }
  addActiveClass(activeIndex) {
    this.setState(prev => ({
      activeIndex: prev.activeIndex === activeIndex ? -1 : activeIndex
    }));
  }

  render() {
    return (
      <div className="container">
        {Array.from({ length: 30 }).map((item, index) => {
          return (
            <div
              key={index}
              style={{
                background: randomColor(colors),
                height: randomHeight(100, 200)
              }}
              className={this.state.activeIndex === index ? "full" : ""}
              onClick={() => this.addActiveClass(index)}
            />
          );
        })}
      </div>
    );
  }
}
* {
  box-sizing: border-box;
}

body {
  margin: 40px;
  background-color: #fff;
  color: #444;
  font: 2em Sansita, sans-serif;
}

.container {
  display: flex;
  flex-direction: column;
  flex-wrap: wrap;
  max-height: 100vh;
  align-items: flex-start
}

.container > * {
  border: 2px solid orange;
  border-radius: 5px;
  margin: 10px;
  padding: 10px 20px;
  background-color: red;
  color: #fff;
}

.full{
  width: 100%;
  height: 100%;
  transition: 2s;
}


沙箱


共2个答案

匿名用户

供应商可能已经提供了一种更简单的方法。 如果您想应用您的自定义css,那么您可以使元素固定时,他们应该是全屏。 大概是这样的:

.full {
    position: fixed;
    left: 0px;
    top: 0px;
    bottom: 0px;
    right: 0px;
    margin: 0px;
    height: 100vh !important;
    transition: 2s;
}

高度必须像这样被覆盖,否则它将无法工作。 您可以使规则更具体,然后可以删除!重要。 但在这种情况下,无论如何也不应该有太大的关系。

编辑

要设置瓷砖的特定高度/宽度,一种方法如下所示:

.container > * {
  width: 100px !important;
  height: 100px !important;
  ...

可能有一个js-config,您可以在其中用JavaScript设置min-height/min-width等。 我不知道图书馆,所以我得自己用谷歌搜索一下。

匿名用户

我相信本教程完全涵盖了您想要完成的内容:https://janosh.dev/blog/react-hooks-masonry

在您的情况下,您只需在单击时扩展到100%的宽度/高度,而不是实现了奇怪的切换

相关问题