2015-11-04 2 views
4

Я работаю на TreeView компонент для меню слева (см скриншот):растяжку элементы TreeView шириной до родительского контейнера в CSS/HTML

enter image description here

Все элементы в дереве должны быть выбираемыми. Я установил 100% ширины для элементов и при выборе элемента в дереве ширины выделенной области меньше левой боковой панели:

enter image description here

Но ширина выделенной области, чтобы быть равной ширине левой боковой панели. Я знаю, что это может быть достигнуто с поля и отступы манипуляций для выделенной области, например:

{ 
margin: 0 -400px; 
padding: 0 400px; 
} 

Но это приводит к горизонтальной прокрутки:

enter image description here

Существуют ли какие-либо «умные» способы сделать выделенные область простирается до контейнера (левая боковая панель)?

+0

У вас есть код, что вы пробовали? – cakan

+0

@cakan Вот пример https://jsfiddle.net/gf2pa4qn/. Это грязно, потому что я копирую и вставляю разметку со страницы, но проблема здесь видна. Я попытаюсь подготовить простую скрипку позже, если проблема не будет решена. – Natasha

ответ

0

Каждый ребенок должен вписываться в его родительский элемент, если width: 100% и/или max-width: 100% Некоторые, например, LI, нет.

Чтобы получить результат, который вы хотите, чтобы каждый элемент нуждается в правилах:

  • white-space: nowrap (так он не будет обернуть на следующую строку)
  • overflow: hidden (отрубать лишний текст)
  • width: 100% (в тянутся к родителю)

ниже фрагмент кода для двух примеров: с UL/LI и DIV-х

html, 
 
body { 
 
    /*UPDATE*/ 
 
    box-sizing: border-box; 
 
    height: 100%; 
 
    width: 100%; 
 
    overflow: hidden 
 
} 
 
*, 
 
*:before, 
 
*:after { 
 
    box-sizing: inherit 
 
} 
 
/* { outline: 1px dotted red } /* for debug */ 
 

 
ul, 
 
li { 
 
    list-style: none; 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 
.side-panel { 
 
    max-width: 200px; 
 
    padding: 4px; 
 
    border: 1px solid rgba(0, 0, 0, .2) 
 
} 
 
ul, 
 
.treeview { 
 
    max-width: 100%; 
 
    text-align: right; 
 
} 
 
li, 
 
.item { 
 
    height: 23px; /*ADD*/ 
 
    width: 100%; 
 
    white-space: nowrap; 
 
    overflow: hidden; 
 
    margin: 5px 0; /*ADD*/ 
 
} 
 
li:hover, 
 
.item:hover { /*ADD*/ 
 
    height: 23px; 
 
    text-align: left; 
 
    border: 1px dashed cornflowerblue; 
 
    cursor: pointer 
 
} 
 
li:nth-child(even), 
 
.item:nth-child(odd) { 
 
    background: rgba(0, 255, 0, 0.1) 
 
} 
 
li:nth-child(odd), 
 
.item:nth-child(even) { 
 
    background: rgba(0, 0, 255, 0.1) 
 
}
<div class="side-panel"> 
 
    <h3>example with UL/LI</h3> 
 
    <ul> 
 
    <li>some item 1</li> 
 
    <li>some item 2</li> 
 
    <li>some item 3</li> 
 
    <li>some item 4fgdfg g</li> 
 
    <li>some item 5 sad d fd</li> 
 
    <li>some item 6 sdtresertg zdf dfsfd</li> 
 
    <li>some item 7</li> 
 
    </ul> 
 
</div> 
 
<div class="side-panel"> 
 
    <h3>example with DIV's</h3> 
 
    <div class="treeview"> 
 
    <div class="item">some item 1</div> 
 
    <div class="item">some item 2</div> 
 
    <div class="item">some item 3</div> 
 
    <div class="item">some item 4fgdfg g</div> 
 
    <div class="item">some item 5 sad d fd</div> 
 
    <div class="item">some item 6 sdtresertg zdf dfsfd</div> 
 
    <div class="item">some item 7</div> 
 
    </div> 
 
</div>

+0

Спасибо за ответ, но я действительно не понимаю, как ваше решение помогает в этом случае. Я настроил ваш пример с помощью div http://jsfiddle.net/yzqLgrjb/: добавлены вложенные древовидные изображения и увеличено заполнение, чтобы сделать его более понятным. Теперь у нас есть 10px padding для боковой панели и 10px для каждого дерева. Вы увидите, что ширина элементов представления дерева меньше ширины боковой панели, но я не должен иметь ее равным. – Natasha

+0

Когда я это исправлю, вам нужно удалить заполнение '.treeview' (просто там для демонстрации) или изменить его на' padding: 0' (в случае UL), я отрегулирую свой ответ, чтобы отразить это ... По умолчанию большинство разработчиков добавляют 'UL, LI {list-style: none; margin: 0; padding: 0} ', чтобы предотвратить нежелательное поведение по умолчанию HTML. –

+0

Ваша скрипка, с моим новым кодом, будет работать, когда вы удалите класс '.item' из элементов, имеющих подпункты. Например, «некоторый элемент 7». Проверьте мою скрипку (http://jsfiddle.net/renevanderlende/yzqLgrjb/7/) –

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