2012-04-10 7 views
2

Ich habe eine Tabelle von Datensätzen, die schön in einer HTML-Tabelle angezeigt wird. Die letzte Spalte dieser Tabelle zeigt ein Symbol an, wenn Sie die Zeile anzeigen. Wenn der Benutzer das Symbol bewegt, erscheint ein Dropdown-Menü für alle Aktionen, die sich auf diese Zeile beziehen.CSS Dropdown-Menü Relativ zu einem TD in einer Tabelle

Derzeit habe ich die td, dass Icon in Position:absolute gesetzt ist und das div des Dropdown-Menüs ist auch auf absolute Position gesetzt.

Dies bedeutet, dass ich die Dropdown-Menü-Div ausrichten kann, um sich gut an die Zeile anzupassen, die es betrifft.

Erstens bin ich nicht ganz sicher, warum das der Fall ist. Ich hätte gedacht, dass ich den TD als Absolute und die Menüdiv als Relative brauchen würde, aber das ist einfach nicht der Fall.

Das aktuelle Problem, das ich derzeit habe (so wie ich es über den gesamten Browser funktioniert) ist, dass wenn die Zeile erweitert wird, doppelte Höhe von Text in anderen Spalten zu sein. Das TD mit absoluter Positionierung erweitert sich nicht auf 100% Höhe des TR. Was Probleme verursacht, wenn Sie versuchen, den tr zu schweben, und Sie bewegen sich dorthin, wo der letzte TD, der sich auf die Zeilenhöhe hätte ausdehnen sollen, und es als einen Schwebeflug auf dem TR registriert.

Irgendwelche Ideen, um das zu umgehen? Das Problem mit dem Setzen des Symbols in einem div, das relativ ist, ist, dass ich das div zu 100% Höhe/Breite des td brauche, um in der Lage zu sein, das Menü richtig auf die Reihe auszurichten!

BEARBEITEN: Wie angefordert Einige Html ... Dies ist eine Vorlage für den Schnurrbart. Sollte nicht schwer zu folgen, auch wenn Sie es nie verwendet haben

<table> 
      <thead> 
       <tr> 
        <th style="width:15px"><input type="checkbox" class="GridSelectAll" onclick="GridSelectAll(this);" /></th> 
        <th class="tar" style="width:30px"> 
         <a href="javascript:SortGrid('EmployeeId')" id="headerEmployeeId"> 
          <%= GetTranslation("EmployeeId") %><span class="sortArrow ui-icon"></span> 
         </a>       
        </th> 
        <th style="width:120px"> 
         <a href="javascript:SortGrid('FirstName')" id="headerFirstName"> 
          <%= GetTranslation("FirstName") %><span class="sortArrow ui-icon"></span> 
         </a> 
        </th> 
        <th style="width:120px"> 
         <a href="javascript:SortGrid('LastName')" id="headerLastName"> 
          <%= GetTranslation("LastName") %><span class="sortArrow ui-icon"></span> 
         </a> 
        </th> 
        <th> 
         <a href="javascript:SortGrid('CompanyName')" id="headerCompanyName"> 
          <%= GetTranslation("PrimayCompanyName") %><span class="sortArrow ui-icon" ></span> 
         </a> 
        </th> 
        <th style="width:55px"> 
         <a href="javascript:SortGrid('EmployeeRowStatus')" id="headerEmployeeRowStatus"> 
          <%= GetTranslation("EmployeeRowStatus") %><span class="sortArrow ui-icon"></span> 
         </a> 
        </th> 
        <th style="width:60px"> 
         <a href="javascript:SortGrid('IsLocked')" id="headerIsLocked"> 
          <%= GetTranslation("IsLocked") %><span class="sortArrow ui-icon"></span> 
         </a> 
        </th> 
        <th style="width:15px"></th> 
       </tr> 
      </thead> 
      <tbody> 
       {{#EmployeeSummaries}} 
       <tr> 
        <td><input type="checkbox" class="chkRowId" value="{{EmployeeId}}" /></td> 
        <td class="tar">{{EmployeeId}}</td> 
        <td>{{FirstName}}</td> 
        <td>{{LastName}}</td> 
        <td>{{PrimaryCompanyName}}</td> 
        <td>{{EmployeeRowStatus}}</td> 
        <td>{{IsLocked}}</td> 
        <td style="position:absolute;"> 
         <a class="optlink"><span class="ui-icon ui-icon-triangle-1-s"></span></a> 
         <div class="optmenu"> 
          <ul> 
           <li><a onclick="UpdateEmployee_LoadDialog({{EmployeeId}});"><%= GetTranslation("ManageEmployee")%></a></li> 
           <li><a onclick="showLoading();" href="../Core/AuditItem.aspx?{{ItemTypeItemIdQuerystring}}"><%= GetTranslation("ViewHistory")%></a></li> 
           <li><a onclick="showLoading();" href="UserGroupsEvo.aspx#/?PageIndex=0&Filter=EmployeeId~EqualTo~{{EmployeeId}}"><%= GetTranslation("ViewUserGroups")%></a></li> 
           <li><a onclick="showLoading();" href="UserGroup_Employees.aspx?{{EmployeeIdQuerystring}}"><%= GetTranslation("ManageUserGroups")%></a></li> 
           <li><a onclick="showLoading();" href="../Employee/EmployeePreferences.aspx?{{EmployeeIdQuerystring}}"><%= GetTranslation("ManagePreferences")%></a></li> 
           <li><a onclick="ResetPasswords_LoadDialog({{EmployeeId}});"><%= GetTranslation("ResetPassword")%></a></li> 
           <li><a onclick="SendWelcomeEmails_LoadDialog({{EmployeeId}});"><%= GetTranslation("SendWelcomeEmail")%></a></li> 
           <li><a onclick="AddEmployee_Company_LoadDialog({{EmployeeId}}, {{PrimaryCompanyId}});"><%= GetTranslation("AddToCompany")%></a></li> 
           <li><a onclick="LoginAsUser({{EmployeeId}});"><%= GetTranslation("LoginAsUser") %></a></li> 
           {{#HasOtherCompanies}} 
           <li class="subheader"><%= GetTranslation("ManageOtherCompanies") %></li> 
           {{/HasOtherCompanies}} 
           {{#Companies}} 
           <li> 
            <span style="vertical-align:top;" class="hh ui-icon ui-icon-circle-close" onclick='RemoveEmployeeFromCompany_LoadDialog(this, {{EmployeeId}}, {{CompanyId}}, "{{CompanyName}}");return false;' title="<%= GetTranslation("Remove") %>"></span> 
            <a onclick="ManageEmployee_Company_LoadDialog({{EmployeeId}}, {{CompanyId}});"> 
             {{CompanyName}} 
            </a>          
           </li> 
           {{/Companies}} 
          </ul> 
         </div>  
        </td> 
       </tr> 
       {{/EmployeeSummaries}} 
      </tbody> 

     </table> 
+0

Könnten Sie einige Beispiel-Code posten? Ein bisschen schwer mit nur Beschreibungen zu folgen. – Travesty3

+0

jetzt zur Verfügung gestellt ... .optlink span ist das Symbol und .optmenu ist das Dropdown-div, das an Ort und Stelle erscheinen sollte – Steve

+0

Haben Sie versucht, die 'td' Position: relativ? – Travesty3

Antwort

2

Ich würde die Tabelle alle zusammen loswerden. Ich würde dann Divs mit Tabellenverhalten verwenden. Dies gibt Ihnen viel mehr Kontrolle darüber, wie jedes Element, jede Zeile und jede Spalte funktioniert. Dieser Link erklärt das Konzept recht gut: http://snook.ca/archives/html_and_css/getting_your_di

+1

Aber er zeigt * tabular * Daten? Perfekte Verwendung eines Tisches? – mattytommo

+0

Ja, das ist die richtige Verwendung einer Tabelle. Es gibt jedoch einen Grund, dass Tabellenqualitäten in andere Elemente integriert werden können. Zum Beispiel der CSS-Code aus dem Link: #left, #right, #middle { display: table-cell; } Dies ermöglicht es Ihnen, eine funktionierende "Tabelle" mit divs (mehr oder weniger wie Tabellen im DOM erstellt werden) zu erstellen, und haben immer noch Zugriff auf andere Eigenschaften und Funktionen. –

+0

Ich bin mir nicht sicher, ob Ihre Methode die beste Lösung für mich ist.(Wir brauchen eine gute Cross-Browser-Unterstützung), aber es hat sicherlich meine Augen für die Zukunft geöffnet. Nie neu können Sie effektiv eine Tabelle mit den Eigenschaften display-table-row usw. erstellen. faszinierend. – Steve

1

Sie könnten versuchen, dieses ::

<!DOCTYPE html> 
<html> 
<head> 
<style> 
body{font-family:arial;} 
table{font-size:80%;background:black} 
a{color:black;text-decoration:none;font:bold} 
a:hover{color:#606060} 
td.menu{background:lightblue} 
table.menu 
{ 
font-size:100%; 
position:absolute; 
visibility:hidden; 
} 
</style> 
<script> 
function showmenu(elmnt) 
{ 
document.getElementById(elmnt).style.visibility="visible"; 
} 
function hidemenu(elmnt) 
{ 
document.getElementById(elmnt).style.visibility="hidden"; 
} 
</script> 
</head> 

<body> 
<h3>Drop down menu</h3> 
<table width="100%"> 
<tr bgcolor="#FF8080"> 
    <td onmouseover="showmenu('tutorials')" onmouseout="hidemenu('tutorials')"> 
    <a href="/default.asp">Tutorials</a><br> 
    <table class="menu" id="tutorials" width="120"> 
    <tr><td class="menu"><a href="/html/default.asp">HTML</a></td></tr> 
    <tr><td class="menu"><a href="/css/default.asp">CSS</a></td></tr> 
    <tr><td class="menu"><a href="/xml/default.asp">XML</a></td></tr> 
    <tr><td class="menu"><a href="/xsl/default.asp">XSL</a></td></tr> 
    </table> 
    </td> 
    <td onmouseover="showmenu('scripting')" onmouseout="hidemenu('scripting')"> 
    <a href="/default.asp">Scripting</a><br> 
    <table class="menu" id="scripting" width="120"> 
    <tr><td class="menu"><a href="/js/default.asp">JavaScript</a></td></tr> 
    <tr><td class="menu"><a href="/vbscript/default.asp">VBScript</a></td></tr> 
    <tr><td class="menu"><a href="default.asp">DHTML</a></td></tr> 
    <tr><td class="menu"><a href="/asp/default.asp">ASP</a></td></tr> 
    <tr><td class="menu"><a href="/ado/default.asp">ADO</a></td></tr> 
    </table> 
    </td> 
    <td onmouseover="showmenu('validation')" onmouseout="hidemenu('validation')"> 
    <a href="/site/site_validate.asp">Validation</a><br> 
    <table class="menu" id="validation" width="120"> 
    <tr><td class="menu"><a href="/web/web_validate.asp">Validate HTML</a></td></tr> 
    <tr><td class="menu"><a href="/web/web_validate.asp">Validate XHTML</a></td></tr> 
    <tr><td class="menu"><a href="/web/web_validate.asp">Validate CSS</a></td></tr> 
    <tr><td class="menu"><a href="/web/web_validate.asp">Validate XML</a></td></tr> 
    <tr><td class="menu"><a href="/web/web_validate.asp">Validate WML</a></td></tr> 
    </table> 
    </td> 
</tr> 
</table> 
<p>Mouse over these options to see the drop down menus</p> 
</body> 

</html> 
+0

Danke, das hat super für mich funktioniert! – gikygik

+0

Willkommen Kumpel! ... [Enjoy_Programming] – ErickBest