2016-02-09 3 views
3

Я разрабатываю веб-приложение с метеорным и материальным дизайном.Flex не работает

Вот что я хочу сделать:

enter image description here

Вот результат со слишком маленьким окном:

enter image description here

И вот результат с большим окном:

enter image description here

HTML-код:

<template name="myRefrigerator_header"> 
    <header class="mdl-layout__header"> 
    <div class="mdl-layout__header-row"> 
     <!-- Title --> 
     <span class="mdl-layout-title">My Refrigerator</span> 
     <!-- Add spacer, to align navigation to the right --> 
     <div class="mdl-layout-spacer"></div> 
    </div> 
    <!-- Simple Textfield --> 
    <div id="msg-layout"> 
     <form action="#"> 
     <div class="mdl-textfield mdl-js-textfield" id="msg-layout-content"> 
      <input class="mdl-textfield__input" type="text" name="content"> 
      <label class="mdl-textfield__label" for="sample1">Text...</label> 
     </div> 
     <button class="mdl-button mdl-js-button mdl-button--primary" 
      id="msg-layout-add-button"> 
      Enregistrer 
     </button> 
     </form> 
    </div> 
    </header> 
</template> 

И CSS применяется к нему:

#msg-layout { 
    background-color: #F5F5F5; 
    margin: 0px 25px 15px 25px; 
    padding-left: 10px; 
    padding-right: 10px; 
    display: flex; 
    flex-direction: row-reverse; 
    flex-wrap: nowrap; 
    justify-content: flex-start; 
    align-items: stretch; 
} 

#msg-layout-content { 
    color: #3F51B5; 
    flex: 1 1 0; 
} 

#msg-layout-add-button { 
} 

Я не понимаю, почему у меня нет правильного поведения, я указал, что я только хочу один ряд, и мой вход должен изменить размер.

В чем я ошибаюсь?

ответ

1

Во-первых, вы должны указать id="msg-layout" на номер <form>. Только прямые дети макета display:flex получат специальные атрибуты гибких контейнеров. Вы отрицаете flexbox, вложив <form>, где будут гибкие дети. В вашем гибком макете есть только один ребенок, <form>.

Это лучший ресурс я нашел для обучения Flex-Box https://css-tricks.com/snippets/css/a-guide-to-flexbox/

0

Класс mdl-textfield__input имеет заданную ширину 300 пикселей из-за ограничений анимации. Вам нужно переопределить это (скажем width: 100%), чтобы получить расширяемое текстовое поле. Однако это может негативно сказаться на анимации, поскольку анимации CSS не любят неизвестные длины.

+0

Как только вы используете 'ширина: blah' вы отрицая преимущества 'flex-direction: row {-reverse} '. Используйте «flex-basis: blah», поэтому flexbox может выполнять свою работу. Вы используете только 'width: blah', если у вас есть' flex-direction: column {-reverse} '. – taystack

+0

Им интересно, почему ширина ввода не расширяется, поэтому. Тем не менее, я сделал неверную цель, фиксируя это сейчас. – Garbee

+0

Если вы хотите, чтобы вклад увеличивался, просто добавьте атрибут: 'flex-grow: 1'. Это позволит заполнить остальную часть доступного пространства. Если ваши другие элементы сокращаются от этого, дайте им «flex-shrink: 0; flex-basis: {MIN_WIDTH px/em/vw /% ...};' – taystack

1

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

Вот урезанная версия/http://codepen.io/sheriffderek/pen/MKzMgp


HTML

<form class='this-form' action='#'> 
    <label class='input-w' for='sample1'> 
     <input type='text' id='sample1'> 
     <span>Text...</span> 
    </label> 
    <button>Enregistrer</button> 
</form> 


SCSS

* { // reset box model 
    box-sizing: border-box; 
} 

.this-form { 
    display: flex; // a 
    flex-direction: row; // b 
    align-items: center; // d 
    max-width: 24rem; 
    padding: .5rem; 
    border: 1px solid blue; 
    .input-w { 
     position: relative; 
     flex-grow: 1; // c 
     input { 
      width: 100%; 
      border: 0; 
      border-bottom: 1px solid gray; 
      &:focus { 
       outline: none; 
       + span { 
        transform: translate(0, -50px); 
        opacity: 0; 
       } 
      } 
     } 
     span { 
      position: absolute; 
      bottom: 3px; 
      left: 0; 
      color: gray; 
      font-size: 12px; 
      transition: 1s; 
     } 
    } 
    button { 
     height: 30px; 
     background: transparent; 
     border: 0; 
     color: blue; 
     margin-left: .5rem; 
    } 
} 
Смежные вопросы