【问题标题】:creating horizontal tree with css用css创建水平树
【发布时间】:2013-07-28 23:20:52
【问题描述】:

我有一个用来填充家谱表的数组。顺序是这样的:

---------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”树使用嵌套列表。任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 您认为应该“使用 CSS”而不是表格有什么特别的原因吗?从语义上讲,没有其他标签可以像表格那样表达祖先/后代之间的关系。请注意,您正在查看的项目仅支持一个父级。
  • 只是因为我想让它看起来更好。 HTML 表格似乎是一种美观的负担。
  • 通过 CSS 增强元素的外观不仅限于非表格元素。如果你对背景图片有创意,你可以做很多事情:cssdeck.com/labs/niw9pvpw

标签: php html css family-tree


【解决方案1】:

陆佩文在codepen 上提供了一个很棒的例子,你应该看看。

【讨论】:

    【解决方案2】:

    这是一个很老的问题,但我对水平 CSS-only 树的搜索仍然把我带到了这里。我没有找到任何解决方案,所以我不得不自己解决。

    如果您也更喜欢 CSS3 家谱代码而不是 Emmanuel 提到的水平树(不幸的是固定宽度),那么您可能会喜欢基于它的my codepen。我需要根在右边,这有点难。

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

    .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

    【讨论】:

      【解决方案3】:

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

      如果你这样做:

      .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);
          }
      

      修复内部锚点方向。

      【讨论】:

      • 我确实在添加您的代码方面取得了进展,但节点之间的行显示不正确。我试着玩弄东西无济于事。我认为唯一的方法是使用图像使其看起来不错的 html 表。 ://
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-15
      • 1970-01-01
      相关资源
      最近更新 更多