2016-11-07 10 views
0

私のコンポーネントは、広告は、以下のものです:高さの自動

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です。

+0

フィドルは高さ'ので、働いていない –

+0

が動作していません。私は特定の幅なしでそれを解決したい。 – Boky

+0

javacriptなしで最小限の例を作成する必要があります – giorgio

答えて

1

画像がロードされた後に、高さをdetailsInnerDivにする必要があります。

これを行うには、offsetHeightを使用して高さを取得し、コンポーネントstateに保存してdetailsOutterDivに割り当てます。 CSSにコメントしている `; 200pxの:この

よう

何かが

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

+0

唯一の問題は、子要素が親要素にあることです。私のコードは少し異なります。 [JsFiddle](https://jsfiddle.net/69z2wepo/61848/) – Boky

関連する問題