2016-10-03 4 views
0

Мне нужно иметь иерархический, разборный список, который имеет 3 столбца. У меня первые две части работают, но я не могу заставить CSS правильно относиться к третьему. На рисунке показан текущий код: (. Слегка дублируются текст слева от col3 является визуальной ошибкой скрипки)Свернуть список с колонками?

enter image description here

Цель состоит в том, чтобы иметь три Col псевдо-таблицу в разборном что col1 имеет стандартный отступ в списке, а col2 - для всех уровней, а col3 - справа для всех уровней. Он должен выглядеть следующим образом:

enter image description here

Я пытался сделать это, имея их обоих плывут вправо, а затем добавить маржу/отступы либо col2 или col3 так, чтобы двигаться col2 по направлению к центру, где я хочу его быть. Однако, как-то col2 заканчивается снаружи col3. Кажется невозможным для меня, но с CSS никакой ошибки невозможно.

Я пробовал различные другие комбинации margin s и padding s и float: left s без везения.

Here's an almost working fiddle.

HTML:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 

<body> 
    <div id="listContainer"> 
    <div class="listControl"> 
     <a id="expandList"><button>Expand All</button></a> 
     <a id="collapseList"><button>Collapse All</button></a> 
    </div> 
    <ul id="expList"> 
     <li> 
     <div class="col1">Non-parent</div> 
     <div class="col2">Col2</div> 
     <div class="col3">Col3</div> 
     </li> 
     <li> 
     <div class="col1">Parent</div> 
     <div class="col2">Col2</div> 
     <div class="col3">Col3</div> 
     <ul> 
      <li> 
      <div class="col1">Child</div> 
      <div class="col2">Col2</div> 
      <div class="col3">Col3</div> 
      </li> 
     </ul> 
     </li> 
     <li> 
     <div class="col1">Grandparent</div> 
     <div class="col2">Col2</div> 
     <div class="col3">Col3</div> 
     <ul> 
      <li> 
      <div class="col1">Parent</div> 
      <div class="col2">Col2</div> 
      <div class="col3">Col3</div> 
      <ul> 
       <li> 
       <div class="col1">Child</div> 
       <div class="col2">Col2</div> 
       <div class="col3">Col3</div> 
       </li> 
      </ul> 
      </li> 
      <li> 
      <div class="col1">Parent</div> 
      <div class="col2">Col2</div> 
      <div class="col3">Col3</div> 
      <ul> 
       <li> 
       <div class="col1">Child</div> 
       <div class="col2">Col2</div> 
       <div class="col3">Col3</div> 
       </li> 
      </ul> 
      </li> 
     </ul> 
     </li> 
    </ul> 
    </div> 

</body> 

CSS:

/********************/ 


/* EXPANDABLE LIST */ 


/********************/ 

#listContainer { 
    margin-top: 15px; 
} 

#expList ul, 
#expList li { 
    list-style: none; 
    margin: 0; 
    padding: 0; 
    cursor: pointer; 
} 

#expList p { 
    margin: 0; 
    display: block; 
} 

#expList p:hover { 
    background-color: #121212; 
} 

#expList li { 
    line-height: 140%; 
    text-indent: 0px; 
    background-position: 1px 8px; 
    padding-left: 20px; 
    background-repeat: no-repeat; 
} 


/*This works in Firefox following W3C standards, but not in other browsers!*/ 


/*https://drafts.csswg.org/css-lists/#marker-content*/ 


/* Collapsed state for list element */ 

#expList .collapsed { 
    /* list-style-type: "+";*/ 
    list-style: none; 
    /*padding: 0px;*/ 
} 


/* Expanded state for list element 
/* NOTE: This class must be located UNDER the collapsed one */ 

#expList .expanded { 
    /*list-style-type: "-";*/ 
    list-style: none; 
    /*padding: 0px;*/ 
} 


/*code that works for non-Firefox*/ 

#expList .collapsed:before { 
    content: "+"; 
    width: 1em !important; 
    margin-left: -1.2em; 
    display: inline-block; 
} 

#expList .expanded:before { 
    content: "-"; 
    width: 1em !important; 
    margin-left: -1.2em; 
    display: inline-block; 
} 

#expList { 
    clear: both; 
} 

.col1 { 
    display: inline; 
    /*padding-right: 100px;*/ 
} 

.col2 { 
    display: inline; 
    float: right; 
} 

.col3 { 
    display: inline; 
    float: right; 
} 

JS:

/**************************************************************/ 
/* Prepares the cv to be dynamically expandable/collapsible */ 
/**************************************************************/ 
function prepareList() { 
    $('#expList').find('li:has(ul)') 
    .click(function(event) { 
     if (this == event.target) { 
     $(this).toggleClass('expanded'); 
     $(this).children('ul').toggle('medium'); 
     } 
     return false; 
    }) 
    .addClass('collapsed') 
    .children('ul').hide(); 

    //Hack to add links inside the cv 
    $('#expList a').unbind('click').click(function() { 
    window.location($(this).attr('href')); 
    return false; 
    }); 

    //Create the button funtionality 
    $('#expandList') 
    .unbind('click') 
    .click(function() { 
     $('.collapsed').addClass('expanded'); 
     $('.collapsed').children('ul').show('medium'); 
    }) 
    $('#collapseList') 
    .unbind('click') 
    .click(function() { 
     $('.collapsed').removeClass('expanded'); 
     $('.collapsed').children('ul').hide('medium'); 
    }) 

}; 

/**************************************************************/ 
/* Functions to execute on loading the document    */ 
/**************************************************************/ 
$(document).ready(function() { 
    prepareList() 
}); 
+2

Итак, в чем проблема? – Ted

+1

Ваш вопрос неясно, можете ли вы предоставить желаемый результат? Я понимаю, вы пытались это объяснить, но ваши объяснения не самые ясные. Можете ли вы проиллюстрировать графику, которую вы уже предоставили с желаемыми результатами? –

+0

«Цель состоит в том, чтобы иметь таблицу с тремя столбцами в сводном списке, так что col1 имеет стандартный отступ в списке, а col2 - для всех уровней, а col3 - справа для всех уровней». Это то, чего я хочу. Кажется ясным для меня. Я добавил рисунок. – Deleet

ответ

0

Решение этой проблемы было понять, что float: right очевидно Кроме того, блоки выравниваются вправо, чтобы они отображались в обратном порядке. Имея это в виду, можно просто переключить порядок блоков, чтобы вернуть нормальный порядок.

т.д .:

<div class="col1">Non-parent</div> 
<div class="col4">Col4</div> 
<div class="col3">Col3</div> 
<div class="col2">Col2</div> 

Working fiddle.

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