2015-08-12 3 views
1

Я играю с flexbox, и мой flex-элемент, похоже, переполняет родительский контейнер. Что я могу сделать, чтобы убедиться, что он останется внутри его границ?Дети переполнения дочерних элементов Flexbox

.content { 
 
    position: absolute; 
 
    top: 5%; 
 
    left: 25%; 
 
    width: 50%; 
 
    height: 80%; 
 
} 
 
.flex-container { 
 
    position: relative; 
 
    top: 20%; 
 
    left: 15%; 
 
    flex-wrap: wrap; 
 
    display: -moz-box; 
 
    display: -webkit-box; 
 
    display: -ms-flexbox; 
 
    display: -webkit-flex; 
 
    display: -moz-flex; 
 
    display: flex; 
 
    flex-direction: column; 
 
} 
 
.flex-item { 
 
    -ms-box-orient: horizontal; 
 
    display: -webkit-box; 
 
    display: -moz-box; 
 
    display: -ms-flexbox; 
 
    display: -moz-flex; 
 
    display: -webkit-flex; 
 
    display: flex; 
 
} 
 
.basicInput { 
 
    float: left; 
 
    width: 70%; 
 
} 
 
#idField { 
 
    float: left; 
 
    width: 50%; 
 
}
<div class="content"> 
 
    <ul class="flex-container wrap"> 
 
    <li class="flex-item"> 
 
     <input type="datetime-local" id="dateField" class="basicInput" /> 
 
    </li> 
 
    <li class="flex-item"> 
 
     <input type="text" id="nameField" class="basicInput" placeholder=" Name:" /> 
 
    </li> 
 
    <li class="flex-item"> 
 
     <select id="idType"> 
 
     <option value="1">1</option> 
 
     <option value="2">2</option> 
 
     <option value="3">3</option> 
 
     <option value="4">4</option> 
 
     </select> 
 
     <input type="text" id="idField" placeholder=" number" /> 
 
    </li> 
 
    </ul> 
 
</div>

К сожалению, что это немного долго :)
Но я пытаюсь перечислить несколько элементов управления по вертикали, и я хочу заказать два элемента управления на одной строке.
Таким образом, UL содержит все, что связано с гибким направлением: столбец и ориентация LI: горизонтальный.
Но даже если элементы управления вложены в div с заданной шириной, они все еще пробегают по его краю. Может ли кто-нибудь дать мне несколько указателей на то, что я должен делать по-другому :)?
Спасибо!

+0

Я не вижу здесь переполнения. –

+0

Я отключил все bling, чтобы было легче читать, но теперь это действительно не показывает проблемы: p Я хочу, чтобы 2 элемента управления на линии занимали столько места, сколько другие однострочные элементы управления. Но выбор является статичным, а idField просто слишком мало или переполняется – user3307017

ответ

0

я не уверен, я понимаю, что вы пытаетесь сделать .. но если your'e спрашивать почему элементы Li переполнены справа .flex-контейнер, то это из-за левой: 15%; Правило у вас там.

.flex-container { 
    position: relative; 
    top: 20%; 
    /* this is the problem --- left: 15%; */ 
    flex-wrap: wrap; 
    display: -moz-box; 
    display: -webkit-box; 
    display: -ms-flexbox; 
    display: -webkit-flex; 
    display: -moz-flex; 
    display:   flex; 
    flex-direction: column; 
} 

вы можете увидеть эффект в этой скрипкой: http://jsfiddle.net/r8a8ojuk/1/

+0

Ах! :) Отлично, спасибо – user3307017

+0

рад помочь. обратите внимание, что в вашем css у вас много избыточных и перекрывающихся правил. попробуйте просмотреть его и прояснить некоторые из них. – omerkarj

+0

Я так много думал, но мне трудно понять, что все на самом деле :) – user3307017

0

иметь чек

//what's wrong here?
.content { 
 
    position: absolute; 
 
    top: 5%; 
 
    left: 25%; 
 
    width: 500px; 
 
    height: 80%; 
 
} 
 
.flex-container { 
 
    position: relative; 
 
    top: 20%; 
 
    left: 15%; 
 
    flex-wrap: wrap; 
 
    display: -moz-box; 
 
    display: -webkit-box; 
 
    display: -ms-flexbox; 
 
    display: -webkit-flex; 
 
    display: -moz-flex; 
 
    display: flex; 
 
    flex-direction: column; 
 
} 
 
.flex-item { 
 
    -ms-box-orient: horizontal; 
 
    display: -webkit-box; 
 
    display: -moz-box; 
 
    display: -ms-flexbox; 
 
    display: -moz-flex; 
 
    display: -webkit-flex; 
 
    display: flex; 
 
    
 
} 
 
#idType { 
 
width:10%; 
 
} 
 
.basicInput { 
 
    float: left; 
 
    width: 70%; 
 
} 
 
#idField { 
 
width:60%; 
 
}
<div class="content"> 
 
     <ul class="flex-container wrap"> 
 
      <li class="flex-item"> 
 
       <input type="datetime-local" id="dateField" class="basicInput"/> 
 
      </li> 
 
      <li class="flex-item"> 
 
       <input type="text" id="nameField" class="basicInput" placeholder=" Name:"/> 
 
      </li> 
 
      <li class="flex-item"> 
 
       <select id="idType"> 
 
        <option value="1">1</option> 
 
        <option value="2">2</option> 
 
        <option value="3">3</option> 
 
        <option value="4">4</option> 
 
       </select> 
 
       <input type="text" id="idField" placeholder=" number"/> 
 
      </li> 
 
     </ul> 
 
    </div>

+0

Я хочу, чтобы два элемента управления занимали столько места, сколько другие, но поскольку Select является статическим по размеру, idField переполняет или делит содержимое div. – user3307017

+0

есть проверка при редактировании. Вы можете контролировать ширину, контролируя первые 2 элемента, а затем 10% присваивается типу id. Так что, если ваши первые 2 поля составляют 70%, ваше числовое поле должно быть 60 –

+0

Во-вторых, для точности пин-точки в размере просто установите idField на 90% и .basicInput на 100% и обработайте размер атрибута div. –

Смежные вопросы