html - 具有绝对位置的父级内部高度自动

标签 html css reactjs

我的组件是广告后面的内容:

class Test extends React.Component {
outterDivStyles() {
    return {
        position: "relative",
        width: "100%",
        overflow: "hidden",
        /*height: this.props.height || 200*/
    }
}

innerDivStyles(){
    return {
        position: "absolute",
        top: 0,
        left: 0,
        right: 0,
        width: "1000%",
        transition: "left .5s",
        transitionTimingFunction: "ease"
    }
}
render(){
    return(
    <div>
            <div ref="detailsOutterDiv" className="detailsOutterDiv" style={this.outterDivStyles()}>
                <div ref="detailsInnerDiv" className="detailsInnerDiv" style={this.innerDivStyles()}>
                   <div className="slide" ><img src="http://placehold.it/250x200" /></div>
                </div>
            </div>
        </div>
  )
}
React.render(<Test />, document.getElementById('container'));

CSS 是:

.detailsOutterDiv{
  background-color: #f00;
  /*height: 200px;*/  //if the height is 200px, then it's ok, but can it be done without that?
  width: 300px;
  display: block;
}

.slide img{
  display: block;
  height: auto;
}

如果父 div 没有特定的高度,有什么方法可以让图像以全高显示?

这里是 jsfiddle .

最佳答案

您必须在图像加载后获取 detailsInnerDiv 的高度。

为此,您必须使用 offsetHeight 获取高度,将其存储在组件 state 中并将其分配给 detailsOutterDiv.

像这样

class Test extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      height: 0
    };
  }  
  get outterDivStyles() {
      return {
          position: "relative",
          width: "100%",
          overflow: "hidden",
          /*height: this.props.height || 200*/
      }
  }
  get innerDivStyles(){
      return {
          position: "absolute",
          top: 0,
          left: 0,
          right: 0,
          width: "1000%",
          transition: "left .5s",
          transitionTimingFunction: "ease"
      }
  }
  render(){
      return(
        <div>
              <div
                  ref="detailsOutterDiv"
                  className="detailsOutterDiv"
                  style={{...this.outterDivStyles,height : this.state.height }}
              >
                    <div 
                       ref={node => this.detailsInnerDiv = node}
                       className="detailsInnerDiv"
                       style={this.innerDivStyles}
                    >
                     <div className="slide" >
                       <img 
                         onLoad={() => this.setState({height:this.detailsInnerDiv.offsetHeight})}
                         src="http://placehold.it/250x200"
                       />
                     </div>
                  </div>
              </div>
          </div>
    )
  }
}

jsfiddle

关于html - 具有绝对位置的父级内部高度自动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40460914/

相关文章:

javascript - 获取以像素为单位的其他 div 高度减去百分比的 div 高度

html - 如何在 iPad 中滚动 div 时修复增加的滚动条拇指大小

html - 文本换行后表格正在调整大小

css - 如何在 native react 样式中设置动态值的 Prop

javascript - 垂直滚动时不允许水平滚动(反之亦然)

javascript - 使用另一个对象的属性作为键查找对象

javascript - React 警告传递的值为 null 的 prop,其中不需要 prop 的 PropType

javascript - 如何在背景横幅上添加链接?

javascript - 如何使用 Javascript 更改多个 HTML 文档的背景颜色

css - 如何在每次 react 组件重新渲染时触发 CSS 动画