Div не будет масштабироваться до размера элемента изображения

#html #css #reactjs #image-resizing

Вопрос:

В настоящее время я пишу веб-приложение для балансировки команд для турниров в League of Legends, но у меня возникла проблема при отображении gif для символа буфера.

Это форма перед нажатием кнопки отправить:

Форма перед отправкой

И это форма после нажатия кнопки отправить в ожидании ответа сервера:

Форма после отправки

Моя проблема заключается в том, что при загрузке изображения div, содержащий его, изменяется до исходного размера изображения вместо его масштабированной формы. Я не уверен, как сделать масштабирование высоты div для изображения.

Это метод ReactJS, который я использую для отображения изображения, так что это либо a display: 'block' , либо a display: 'none' .

 render() {
        return (
            <img 
                style={{display: this.props.display ? "block" : "none"}} 
                src={loadGif} alt="Loading..." 
                className="bufferIcon"
            />
        );
    }
 

Это CSS для самого img:

 .bufferIcon {
    max-height: 25%;
    width: auto;
}
 

Эти компоненты существуют в компоненте RiotDevKeyForm:

 render() {
        return (<div className="riotdevkeyform">
            <div className="text">
            Enter Riot Dev Key:
            </div>
            <div className="input">
                <form onSubmit={this.state.isLoading ? (e) => e.preventDefault() : this.handleSubmit}>
                    <input readOnly={this.state.isLoading ? true : false} type="text" value={this.state.key} onChange={this.handleChange}></input>
                </form>
            </div>
            <div className="submit">
                <button 
                    style={{display: this.state.isLoading ? "none" : "block"}} 
                    onClick={this.handleSubmit}>
                        Submit
                </button>
            </div>
            <ErrorMsg 
                display={this.state.errMsg.length !== 0}
                errMsg={this.state.errMsg}
            />
            <BufferIcon 
                display={this.state.isLoading}
            />
        </div>);
    }
 

Which has the following CSS:

 .riotdevkeyform {
    display: grid;
    grid-template-areas: none;
    padding: 0 auto;
    margin: 0 auto;
  }
  
  .riotdevkeyform * {
    margin: 0 auto;
    padding: 2px;
    display: flex;
    justify-content: center;
    font-size: 1em;
    font-family: Cambria;
    font-size: 12pt;
    font-weight: bolder;
    width: 80%;
  }
  
  .riotdevkeyform input {
    padding: 0px;
    width: 90%;
  }
  
  .riotdevkeyform button {
    padding: 0px;
    max-width: 30%;
  }
 

This RiotDevKeyForm component is also contained within another component:

 render() {
    return (
      <div className="App">
        <header className="App-header">
        </header>

        <div className="form">
          {this.state.form_current === FormType.RIOTDEVKEYFORM amp;amp; <RiotDevKeyForm onKeyAccept={this.handleKey} />}
          {this.state.form_current === FormType.GETSUMMONERSFORM amp;amp; <GetSummonersForm />}
          {this.state.form_current === FormType.VIEWTEAMSFORM amp;amp; <ViewTeamsForm />}
        </div>
  
        <BackgroundSlider 
          images={[image1, image2, image3, image4, image5, image6]}
          duration={8}
          transition={2}
        />
      </div>
    );
  }
 

Который имеет следующий CSS:

 body {
    margin: 0;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
      'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
      sans-serif;
  }
  
  .form {
    background-color: azure;
    margin: 0 auto;
    padding: 5px;
    top: 50%;
    transform: translateY(40vh);
    min-width: 15%;
    min-height: 10%;
    max-width: 300px;
    /*max-height: 150px;*/
    opacity: 75%;
    border: solid black 2px;
    -webkit-animation: fadeIn 1.2s ease-in-out;
    animation: fadeIn 1.2s ease-in-out;
  }
  
  /* CSS Animation */

  @-webkit-keyframes fadeIn {
    0% { 
        opacity:0; 
        transform: scale(0.6);
    }

    100% {
        opacity:100%;
        transform: scale(1);
    }
}

@keyframes fadeIn {
    0% { opacity:0; }
    100% { opacity:100%; }
}
 

Комментарии:

1. Нам нужно будет увидеть больше компонентов, чтобы иметь возможность помочь. В качестве альтернативы вывод HTML/CSS может быть полезен, поскольку это действительно проблема макета/стиля, а не напрямую связана с реакцией.