2 Stimmen

Wie man Registerkarten mit reinem HTML/CSS erstellt

Ich versuche, Tabs mit reinem HTML/CSS zu erstellen, und es funktioniert gut in allen gängigen Browsern. Außer IE, sowohl 7 als auch 8.

Wenn ich nichts hinzufüge display: table zum ul Der Inhalt steht nicht in jedem Browser in einer neuen Zeile. Der IE zeigt ihn jedoch nicht in einer neuen Zeile an, auch nicht, nachdem ich ihn hinzugefügt habe. Was kann ich dagegen tun? Gibt es eine bessere Möglichkeit, Tabs in reinem HTML/CSS zu erstellen?

<!DOCTYPE>
<html>
    <head>
        <style type="text/css">
          ul.tabs {
              display: table;
              list-style-type: none;
              margin: 0;
              padding: 0;
          }

          ul.tabs>li {
              float: left;
              padding: 10px;
              background-color: lightgray;
          }

          ul.tabs>li:hover {
              background-color: yellow;
          }

          ul.tabs>li.selected {
              background-color: orange;
          }

          div.content {
              border: 1px solid black;
          }
        </style>
    </head>
    <body>
        <ul class="tabs">
            <li class="selected">One</li>
            <li>Two</li>
            <li>Three</li>
        </ul>
        <div class="content">
            This should really appear on a new line.
        </div>
    </body>
</html>

1voto

Alexey Lebedev Punkte 11632

Aufgrund der schwimmenden <li> Elemente Ihr <ul> Element hat die Höhe Null.

Versuchen Sie ul { overflow: auto; } y div.content { clear: both; } zu Ihrem CSS

0 Stimmen

Dies funktioniert, wenn ich nur eine Spalte, wie in dem Beispiel, aber ich habe ein zweispaltiges Layout (sorry für nicht einschließlich dieser in der Frage). Wenn ich "clear: left" verwende, funktioniert es, aber die Tabs sind dann auf der gleichen Höhe wie die zweite Spalte.

0voto

Shane Garelja Punkte 1428

Ich habe diesen Ansatz verwendet, der gut funktioniert. Er verwendet eine Inline-Liste: http://nontroppo.org/test/tab1.html

UPDATE: Der obige Text ist veraltet. Wenn ich die Frage jetzt beantworten würde, würde ich vorschlagen, die CSS-Ziel-Pseudoklassen-Methode zu verwenden, die hier beschrieben wird: http://www.w3.org/Style/Examples/007/target . Es gibt andere Methoden wie die Verwendung von (versteckten) Optionsfeldern in Kombination mit der Pseudoklasse "checked", aber die Verwendung von "target" scheint die sauberste zu sein.

0 Stimmen

Hallo, dies ist keine Registerkarte, weil es eine separate Seite für jede Registerkarte lädt, wird es Website langsam machen

0 Stimmen

Wie bitte? Die OP war nicht explizit über, ob es in der gleichen Seite zu laden benötigt. Werfen Sie einen Blick auf das Code-Beispiel des Benutzers - das war es, was er wollte. Ich bin auch nicht der Meinung, dass die Seite dadurch langsamer wird, da nur der Inhalt geladen wird, der für die gerade angezeigte Registerkarte benötigt wird. Was ist, wenn Sie nie auf Registerkarte 2 und 3 schauen? Dann haben Sie sie umsonst geladen. Es hängt wirklich von der Implementierung der Tabs ab, d.h. ob sie für die primäre Navigation (separate Seiten) oder für zusätzliche Inhalte (alle Tab-Inhalte auf einer Seite) verwendet werden.

1 Stimmen

... weiter oben Wenn ich die Frage jetzt beantworten würde, würde ich vorschlagen, die CSS-Ziel-Pseudoklassen-Methode zu verwenden, die hier beschrieben wird: w3.org/Style/Examples/007/target - diese Frage wurde vor über 2 Jahren gestellt!

0voto

Daniel Kutik Punkte 6937

Ich "schwebe" immer nur in den li Elemente:

ul.tabs{list-style: none;}
ul.tabs li{float:left;}

0voto

TimFoolery Punkte 1885

Hace este (jsfiddle) für Sie arbeiten?

Änderungen vorgenommen:

  1. Entfernt display: table; von ul.tabs
  2. Entfernt float:left von ul.tabs li's
  3. Hinzugefügt display:inline-block zu ul.tabs li's

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X