用css创建水平树

时间:2013-07-28 23:20:53

标签: php html css family-tree

我有一个数组,我用一个家谱表填充。它是这样的:

--------- 3

---- 1

-------- 4

0

-------- 5

---- 2

-------- 6

依此类推......例如http://bullybloodlines.net/dogdetails.php?name=muscletone%27s+lucky+bam+bam+of+power+line+bullys

我的代码是:

<?php
$generations = 4;
$genTableArray = array();
for($genCol = 0; $genCol <= $generations; $genCol++)
{
    $genRowCount = pow(2, $genCol);
    $rowspan = pow(2, $generations) / $genRowCount;

    for($familyGenCount=0; $familyGenCount<$genRowCount; $familyGenCount++)
    {
        $personIndex = pow(2, $genCol) + $familyGenCount - 1;
        $rowIndex = $rowspan * $familyGenCount;
        $encodedog = urlencode($dogarr[$personIndex]);
        $genTableArray[$rowIndex][] = "<td rowspan='{$rowspan}'><a href='http://bullybloodlines.net/dogdetails.php?name={$encodedog}'><img src='images/dogpics/{$dogpic[$personIndex]}' width=100/><br><br>{$dogarr[$personIndex]}</a></td>\n";
    }
}

ksort($genTableArray);
$familyTreeHTML = '';
foreach($genTableArray as $rowData)
{
    $familyTreeHTML .= "<tr>\n" . implode("\n", $rowData) . "</tr>\n";
}
?>


<table border='1' align='center' cellpadding='4' style='border-collapse:collapse;'>
    <?php echo $familyTreeHTML; ?>
</table>

这很好用。但是,我的目标是更改布局并使用CSS创建类似http://thecodeplayer.com/walkthrough/css3-family-tree的内容,但像我的桌子一样水平。

我已尝试将其添加到css中以旋转它:

.tree{
-webkit-transform: rotate(-90deg);
-moz-transform: rotate(-90deg);
transform:  rotate(-90deg);
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); /* IE6, IE7 */
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)" /* IE8 */
-ms-transform: rotate(-90deg);
}

它会旋转,但文本也会侧向显示。这是我的第一个问题。我也无法使用我的数组以它的排列方式填充它。 “css3-family”树使用嵌套列表。任何帮助将不胜感激。谢谢。

3 个答案:

答案 0 :(得分:4)

The Peewen Lu对codepen的一个很棒的例子,你应该看看。

Sheer awesomeness

答案 1 :(得分:0)

不确定我是否正确但你可以将内部元素从树上旋转以获得所需的方向。

所以,如果你这样做:

.tree{
-webkit-transform: rotate(-90deg);
-moz-transform: rotate(-90deg);
transform:  rotate(-90deg);    
-ms-transform: rotate(-90deg);
}

你可以添加:

.tree a {
    -webkit-transform: rotate(90deg);
    -moz-transform: rotate(90deg);
    transform:  rotate(90deg);        
    -ms-transform: rotate(90deg);
    }

修复内锚定位。

答案 2 :(得分:0)

一个古老的问题,但是我对仅CSS的水平树的搜索仍然将我引到这里。我没有找到任何解决方案,所以我必须自己解决。

如果您还喜欢CSS3家族树代码,而不是Emmanuel提到的水平树(不幸的是固定宽度),那么您可能会喜欢my codepen基于它。我需要使根在右边,并且要难一些。

enter image description here

基本上,我已将所有边距/边距手动逆时针旋转了一步。例如,而不是:

.tree li::before, .tree li::after{
    content: '';
    position: absolute; top: 0; right: 50%;
    border-top: 1px solid #ccc;
    width: 50%; height: 20px;
}

您应该写

.tree li::before, .tree li::after{
    content: '';
    position: absolute; left: 0; bottom: 50%;
    border-left: 1px solid #ccc;
    width: 20px; height: 50%;
}

或(从右到左)

.tree li::before, .tree li::after{
    content: '';
    position: absolute; right: 0; bottom: 50%;
    border-right: 1px solid #ccc;
    width: 20px; height: 50%;
}

对于从右到左的树,我还必须设置direction: rtl