• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Hover zeigt div nicht an bzw. wenn dann falsch formatiert

Foxbone

Neues Mitglied
Hallo zusammen,

habe ein Problem dass ich zwei Links erstellt habe, die durch eine Hover Funktion ein Div anzeigen sollen.
Im 1. Link funktioniert das Hover, und beim zweiten habe ich das display: block; gesetzt um zu demonstrieren, wie ich es gerne hätte, nämlich mit zentriertem Text und ganz unten formatiert.

Nur durch das Versetzen des </div> an eine andere Stelle ändert sich genau diese Sache.

Um es kurz zu machen, ich hätte gerne das Aussehen von dem 2. Link/Div und die Funktion des 1. Link/Div durch Hover.

Wer kann genau bei diesem Sachverhalt helfen ????

Code:
<!DOCTYPE html>
<html>

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>Onlinestatus</title>
<style>
    .main {
        width: 95%;
        background-color: red;
        display: block;
        z-index: 0;
        position: relative;
        font-family:Arial, Helvetica, sans-serif;
        margin:0 auto;
        padding:20px;
    }
    .button {
        background-color: green;
        position:relative;
        line-height:4em;
        font-family:Arial, Helvetica, sans-serif;
        color: white;
        width: 30%;
    }
    .button:hover > .geheim {
        display: block;
        z-index: 4;
    }
    .diva {
        color: white;
        font-size:2.5em;
        text-decoration:none;
        display:block;
    }
    .diva:hover {
        color:yellow;
    }
    .geheim {
        width: 140px;
        height:140px;
        position:absolute;
        top: 330px;
        left: 550px;
        color: black;
        font-size:xx-small;
        text-align:center;
        display: none;
        background-color: rgba(150,230,230,0.5);
        border:2px black solid;
    }
    .geheimdiv { 
        width:100%;
        position:absolute;
        bottom:0;
    }
    .geheim2 {
        width: 160px;
        height:120px;
        position: absolute;
        top: 320px;
        left: 350px;
        color: black;
        font-size:xx-small;
        text-align:center;
        display: Block;
        background-color: rgba(150,130,230,0.5);
        border:2px black solid;
    }
    .button:hover > .geheim2 {
        display:block;
        z-index: 4;
    }
    
    </style>

</head>

<body>
    <div class="main">
        <div class="button">
            <a class="diva" href="#">Link-1:
            </a>
            
            
                <!--diesen /Div sehen Sie 5 Zeilen weiter unten-->
        <div class="geheim">
            <p class="geheimdiv">Ich bin der Link-1<!-- Hier ist das Div das als "Rect"-Markierung dient --> 
            </p>
        </div>
        </div>    <!-- Div von 5 Zeilen vorher hier eingefügt-->
        
        
        <p>
        Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata
        <br>
        sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed
        <br>
        diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
        </p>
        <div class="button">
            <a class="diva" href="#">Link-2:
            </a>
        </div>
        <div class="geheim2">
            <div class="geheimdiv">Link-2 ....            <!-- Hier ist das Div, dass als Markierung dient --> 
            </div>
        </div>
    </div>   
</body>

</html>
 
Werbung:
Meinst Du so?

HTML:
<!DOCTYPE html>
<html>
 
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>Onlinestatus</title>
<style>


  button.diva {
    width: 140px;
    height: 50px;
    background-color: green;
    border: none;
  }

  button.diva a {
    text-decoration: none;
    color: #fff;
  }

  button.diva a:hover {
    color: yellow;
  }

  div.geheim {
    display: none;
    margin-top: 50px;
    color:  #fff;
    width: 140px;
    height: 140px;
    background-color: blue;
  }

  div.geheim p {
    padding: 0;
    text-align: center;
    display: table-cell;
    margin: 0;
    vertical-align: bottom;
}


  button.diva:hover + div.geheim {
    display: table;
  }
  
    </style>
 
</head>
 
<body>

            <button class="diva"><a href="#">Link-1:
            </a></button>
  
          
                <!--diesen /Div sehen Sie 5 Zeilen weiter unten-->
        <div class="geheim">
            <p>Ich bin der Link-1<!-- Hier ist das Div das als "Rect"-Markierung dient -->
            </p>
        </div>
  <!-- Div von 5 Zeilen vorher hier eingefügt-->
      
      
</body>
 
</html>
 
Okay also folgende Lösung. Wenn ich dein Problem richtig verstanden habe, dann willst du den Text von Link 1, sowie die Position wie Link 2 haben richtig?

Also du hast ja deinen Link 1 "absolute" gesetzt. Das heißt, durch das verändern von "top" und "left" lässt sich dies schon einmal beheben. Auch die Größe des Link 2 kann man schon anpassen.

HTML:
.geheim {
        width: 160px;
        height:120px;
        position:absolute;
        top: 300px;
        left: 330px;
        ...
        ...

So nun hast du noch das Problem mit der Schrift. Die soll ja unten angezeigt werden.
Hier ist Grund Nummer 1:
HTML:
<p class="geheimdiv">Ich bin der Link-1<!-- Hier ist das Div das als "Rect"-Markierung dient -->
</p>

ein <p> Element hat immer die Eigenschaft ein margin-top und margin-bottom zu haben. In diesem Falle 9px.
Also einfach (in CSS) 0 setzen.

HTML:
p.geheimdiv {
    margin-bottom: 0;
    margin-top: 0;
}

nun ist es schon mal ein kleines Stück weiter unten.
Doch nun der Hauptgrund. Deine line-heigt ist auf 4em gestellt.
Das liegt daran, dass dein Link 1 im folgenden div liegt:
HTML:
.button {
        background-color: green;
        position:relative;
        line-height:4em;
        font-family:Arial, Helvetica, sans-serif;
        color: white;
        width: 30%;
    }

<div class="button">

Alle Elemente die in diesem div enthalten sind erhalten also die Eigenschaften von .button

Dies lässt sich ändern, indem du einfach ein style element in dein <p> einfügst.
HTML:
<p class="geheimdiv" style="line-heigt: normal;">Ich bin der Link-1<!-- Hier ist das Div das als "Rect"-Markierung dient -->
</p>
Denn alle style-Elemente die direkt im Tag geschrieben werden, haben immer die Priorität.
Ich weiß, dass den kompletten Code posten immer eine schlechte Idee ist, weil die Leute meistens nur Kopieren, aber ich mal eine Ausnahme:

HTML:
<!DOCTYPE html>
<html>

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>Onlinestatus</title>
<style>
    .main {
        width: 95%;
        background-color: red;
        display: block;
        z-index: 0;
        position: relative;
        font-family:Arial, Helvetica, sans-serif;
        margin:0 auto;
        padding:20px;
    }
    .button {
        background-color: green;
        position:relative;
        line-height:4em;
        font-family:Arial, Helvetica, sans-serif;
        color: white;
        width: 30%;
    }
    .button:hover > .geheim {
        display: block;
        z-index: 4;
    }
    .diva {
        color: white;
        font-size:2.5em;
        text-decoration:none;
        display:block;
    }
    .diva:hover {
        color:yellow;
    }
    .geheim {
        width: 160px;
        height:120px;
        position:absolute;
        top: 300px;
        left: 330px;
        color: black;
        font-size:xx-small;
        text-align:center;
        display: none;
        background-color: rgba(150,230,230,0.5);
        border:2px black solid;
    }
    .geheimdiv {
        width:100%;
        position:absolute;
        bottom:0;
    }
    .geheim2 {
        width: 160px;
        height:120px;
        position: absolute;
        top: 320px;
        left: 350px;
        color: black;
        font-size:xx-small;
        text-align:center;
        display: Block;
        background-color: rgba(150,130,230,0.5);
        border:2px black solid;
    }
    .button:hover > .geheim2 {
        display:block;
        z-index: 4;
    }
   
    </style>

</head>

<body>
    <div class="main">
        <div class="button">
            <a class="diva" href="#">Link-1:
            </a>
           
           
                <!--diesen /Div sehen Sie 5 Zeilen weiter unten-->
        <div class="geheim">
            <p class="geheimdiv" style="line-height: normal; margin-bottom: 0; margin-top: 0;">Ich bin der Link-1<!-- Hier ist das Div das als "Rect"-Markierung dient -->
            </p>
        </div>
        </div>    <!-- Div von 5 Zeilen vorher hier eingefügt-->
       
       
        <p>
        Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata
        <br>
        sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed
        <br>
        diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
        </p>
        <div class="button">
            <a class="diva" href="#">Link-2:
            </a>
        </div>
        <div class="geheim2">
            <div class="geheimdiv">Link-2 ....            <!-- Hier ist das Div, dass als Markierung dient -->
            </div>
        </div>
    </div>  
</body>

</html>
 
Werbung:
@pipolo100: Danke für deine Hilfe, der Ansatz war schon sehr gut, vielen Dank, allerdings wollte ich den ganzen Button/Div als Schaltfläche und ich habe deine Lösung leider nicht mit mehreren Buttons hinbekommen ...

@Aaron3219: Dein Vorschlag war für meinen Falls bestens geeignet und ich konnte diesen für mich weiter umbauen, vielen Dank :)

1. Vielleicht könnt ihr mir noch eines erläutern, wann ist es besser mit Button im Vergleich zu einer Div-Hover/Schaltfläche zu arbeiten bzw. wo liegen die Vor-/Nachteile?

2. Gibt es eine Möglichkeit alle vorherigen Hoverelemente nochmal alle auf einmal unter einem Link 4 aufzurufen oder muss man dann unter diesem alle vorherigen nochmal im HTML einfügen ? (Idee einer Gruppe von Elementen die dann beliebig aufgerufen werden kann?)

3. Ich verstehe den Zusammenhang noch nicht ganz wenn in der aufzurufenden Class mit den Zeichen > ~ und + gearbeitet wird, was genau bewirken diese ...
bsp.

.button:hover > .geheim

oder

button.diva:hover + div.geheim

dann habe ich die Tage noch sowas ähnliches wie

button.diva:hover ~ {

gesehen ....

könnt ihr mir das erklären bzw. eine link wo das erklärt wird ?

Danke nochmal.

Hier ist mein Ergebnis, wie es dann aussieht, der Hintergrund ist ähnlich wie bei JavaScript eine Map zu erstellen, bei der man über einen Link einen speziellen Bereich hervorheben kann.

Code:
<!DOCTYPE html>
<html>
 
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>Onlinestatus</title>
<style>
    .main {
        width: 90%;
        background-color: red;
        display: block;
        z-index: 0;
        position: relative;
        font-family:Arial, Helvetica, sans-serif;
        margin:0 auto;
        padding:20px;
    }
    .button {
        background-color: green;
        position:relative;
        line-height:4em;
        font-family:Arial, Helvetica, sans-serif;
        color: white;
        width: 170px;
    }
    .button:hover > .geheim {
        display: block;
        z-index: 4;
    }
    .diva {
        color: white;
        font-size:2.5em;
        text-decoration:none;
        padding:5px;
        display:block;
    }
    .diva:hover {
        color:yellow;
    }
    .geheimdiv {
        width:100%;
        position:absolute;
        bottom:0;
        line-height: normal;
        margin-bottom: 0;
        margin-top: 0;     
    }
  
    .geheim {
        position:absolute;
        color: black;
        font-size:xx-small;
        text-align:center;
        display: none;
        border:2px black solid;
    }
    .geheim1 {
        width: 160px;
        height:70px;
        top: 0px;
        left: 180px;
        background-color: rgba(150,230,230,0.8);
    }
    .geheim12 {
        width: 160px;
        height:70px;
        top: 0px;
        left: 350px;
        background-color: rgba(70,230,130,0.5);
    }
    .geheim13 {
        width: 160px;
        height:70px;
        top: 0px;
        left: 520px;
        background-color: rgba(120,205,130,0.5);
    }

    .geheim2 {
        width: 160px;
        height:70px;
        top: 0px;
        left: 180px;
        background-color: rgba(70,170,70, 0.8);
    }
    .geheim22 {
        width: 160px;
        height:70px;
        top: 0px;
        left: 350px;
        background-color: rgba(170,100,90, 0.8);
    }
    .geheim3 {
        width: 160px;
        height:70px;
        top: 0px;
        left: 180px;
        background-color: rgba(255,255,150,0.8);
    }
    .button:hover > .geheim2 {
        display:block;
        z-index: 4;
    }
 
    </style>
 
</head>
 
<body>
    <div class="main">
        <div class="button">
            <a class="diva" href="#">Link-1:
            </a>
            <div class="geheim geheim1">
            <p class="geheimdiv">Ich bin der Link-1 <!-- Hier ist das Div das als "Rect"-Markierung dient -->
            </p>
        </div>
            <div class="geheim geheim12">
            <p class="geheimdiv">Ich bin der Link-1-2 <!-- Hier ist das Div das als "Rect"-Markierung dient -->
            </p>
        </div>
            <div class="geheim geheim13">
            <p class="geheimdiv">Ich bin der Link-1-3 <!-- Hier ist das Div das als "Rect"-Markierung dient -->
            </p>
        </div>

        </div>     
    
        <p>
        Bla bla bla blubb - Bla bla bla blubb - Bla bla bla blubb - Bla bla bla blubb
        </p>
        <div class="button">
            <a class="diva" href="#">Link-2:
            </a>
            <div class="geheim geheim2">
            <p class="geheimdiv">Ich bin aber Link-2 .... <!-- Hier ist das Div, dass als Markierung dient -->
            </p>
        </div>
            <div class="geheim geheim22">
            <p class="geheimdiv">Ich bin aber Link-2-2 .... <!-- Hier ist das Div, dass als Markierung dient -->
            </p>
        </div>
        </div>
        <p>
        Bla bla bla blubb - Bla bla bla blubb - Bla bla bla blubb - Bla bla bla blubb
        </p>
        <div class="button">
            <a class="diva" href="#">Link-3:
            </a>
            <div class="geheim geheim3">
            <p class="geheimdiv">Ich bin aber Link-3 .... <!-- Hier ist das Div, dass als Markierung dient -->
            </p>
        </div>
        </div>

    </div>
</body>
 
</html>
 
Zuletzt bearbeitet:
Also ich schreib das vom Handy. Ich konnte mir den neuen Code also nicht angucken. Aber die anderen Fragen schon.

1. Also ich tendiere eigentlich immer zu einem Button. Das liegt daran, dass man bei einem button die gesamte Schaltfläche anklicken kann, während man bei einem div nur den Text anklicken kann. Man kann ja beide mit CSS bearbeiten.

2. Also von vorne
Beispiel 1:
Diese .class kennst du schon:
.irgendwas

Diese ist neu:
button.irgendwas

Wenn du einen Tag vor die eigentliche .class schreibst, bewirkst du, dass dieses .class nur für Tags des (in diesem Falle) buttons gilt.
Es geht also auch:
button.irgendwas {}
div.irgendwas {}

Alle divs die diese Klasse haben, haben dann die styles des div.irgendwas und alle buttons die button.irgendwas


Nun zum nächsten Punkt.
button.irgendwas:hover
Das z.B :hover kannst du hinter eine .class hängen. Das bewirkt, dass du, wenn du über das Element gehst, andere style-Eigenschaften wirken.
Beispiel:
.blabls {color:white;}
.blabla:hover {color:black;}

Wenn du über das Element gehst, ändert sich die Farbe zu schwarz. Das kannst du mit :active erweitern
.blabla {color:brown;}
Das bewirkt, wenn du den Button klickst, dann wird die Schriftfarbe braun.

Ich poste in 2 Stunden nochmal was zum Thema CSS animationen, um einen Übergang hinzu zufügen.


.blabla + .hallo {}
bewirkt, dass die styles für beide classen gelten. So musst du nicht 2 mal identische .class machen.

div > a {}
bewirkt, dass es für elle Elemente gilt, die so im Html aufgebaut sind

<div>
<a>
</a>
</div>

Also genau die Reihenfolge
 
@Aaron3219 : Danke soweit hab ich das schon kapiert, aber bei dem "Div > a {}" geht es ja genau so wenn ich "Div a {}" hab nur den Unterschied nicht kapiert ???

Das mit dem Hover kenne ich schon ... kann nur nichts mit der Welle ~~~ anfangen, vll. auch in anderem Zusammenhang als Hover, bin mir nicht ganz sicher ?

Wenn Du noch was zu der Gruppierung bzw. zum Aufrufen aller vorher schon definierten "Rect" mit einem einzigen Link sagen kannst wäre ich sehr dankbar.
 
Werbung:
Beispiel:
Ich habe Link1 Link2 und Link3 ....
Link 1 hat ein Hoverelement, das angezeigt wird,
Link 2 hat zwei Hoverelemente die angezeigt werden,
Link 3 soll alle Hoverelemente von 1 und 2 anzeigen, aber ohne diese (im Quellcode unter Link 3) duplizieren/wiederholen zu müssen.

Die Frage die entsteht ist, kann man diesen Elementen von Link 1 und Link 2 einer Art ID/Classe/Gruppe zuweisen, und dann unter Link 3 aufrufen, um nicht im Code alles doppelt und dreifach von zuvor/oben wiederholen zu müssen.

Hoffe es war verständlich ?
 
Werbung:
Ich habe gerade mal eine Kopie deiner Demo angefertigt @Foxbone!
Ich komme auf 85 Zeilen statt 159 Zeilen Code (MIT dem doppelt kopieren von Dingen. Also ist es bei mir so, dass ich alles aus Link 1 und Link 2 auf Link 3 kopiert habe). Wenn du willst schick ich ihn dir mal rein. Dann ist es deine Aufgabe, ihn mit dem Code von @Sempervivum zu verbinden ;)

HTML:
<!DOCTYPE html>
<html>
    <head>
        <title>
            Blabla
        </title>
      
        <style>
            body, html { margin: 0; padding: 0; font-family: Arial, Helvetica, sans-serif;}
            .main {width: 100%; height: 100%;}
            .box {
                width: 90%;
                margin: 0 auto;
                background-color: red;
                margin-top: 7px;
            }
          
            .button {
                background-color: green;
                color: white;
                border: 0;
                text-align: left;
                width: 170px;
                padding: auto 20px auto 10px;
                font-size: 2.5em;
                height: 75px;
                margin-right: 10px;
            }
          
            .geheim {             
                width: 160px;
                height:75px;
                border: 2px solid black;
                margin-left: 0px;
                line-height: 130px;
                font-size: 9px;
            }
          
          
            .none {display: none;}
          
            .hovgroup3 {visibility: hidden;}
          
            #link1:hover ~ #hovele1 {visibility: visible;}
          
            #link2:hover ~ .hovgroup2 {visibility: visible;}
          
            #link3:hover ~ .hovgroup3 {visibility: visible;}
          
        </style>
    </head>
  
    <body>
        <div class="main">
            <div class="box">
                <div style="padding: 20px;">
                    <button class="button" id="link1" style="float: left;">Link1</button>
                    <div class="hovgroup3" id="hovele1">
                        <button class="geheim text">Ich bin der Link 1-1</button>
                        <button class="geheim text">Ich bin der Link 1-2</button>
                        <button class="geheim text">Ich bin der Link 1-3</button>
                    </div>
                    <p>Bla bla bla blubb - Bla bla bla blubb - Bla bla bla blubb - Bla bla bla blubb</p>
                  
                    <button class="button" id="link2" style="float: left;">Link1</button>
                    <div class="hovgroup2 hovgroup3" id="hovele21">
                        <button class="geheim text">Ich bin der Link 2-1</button>
                        <button class="geheim text">Ich bin der Link 2-2</button>
                    </div>               
                    <p>Bla bla bla blubb - Bla bla bla blubb - Bla bla bla blubb - Bla bla bla blubb</p>
                  
                  
                    <button class="button" id="link3" style="float: left;">Link1</button>
                    <div class="hovgroup3" id="hovele3">
                        <button class="geheim text">Ich bin der Link 1-1</button>
                        <button class="geheim text">Ich bin der Link 1-1</button>
                        <button class="geheim text">Ich bin der Link 1-1</button>
                        <button class="geheim text">Ich bin der Link 2-1</button>
                        <button class="geheim text">Ich bin der Link 2-2</button>                       
                    </div> 
                </div>
            </div>         
        </div>
    </body>
</html>

Edit:
Ich habe Buttons genommen.
 
Schau mal, ob ich dich richtig verstanden habe:
https://jsfiddle.net/Sempervivum/yhaxepxh/3/

@Sempervivum:
Danke für diese funktionell tolle Lösung, prinzipiell habe ich mir das so vorgestellt, muss aber gestehen, dass ich den Code nicht ganz kapiere, ich würde ihn aber gerne verstehen ?
  • div {
    display: none;
    } /* Diesen Bereich verstehe ich .... einfach ausblenden */

    #link1:hover ~ #hovele1 {
    display: block;
    } /* Diesen Bereich verstehe ich nicht, bei Hover über ID #Link1 ??? ~ ??? Was macht das Zeichen ? dann zeige mir die ID #hovele1 an ? */

    #link2:hover ~ .hovgroup2 {
    display: block;
    }/* Diesen Bereich verstehe ich nicht, gleiches als zuvor, aber jetzt wird eine Class .hovgroup2 aufgerufen, und die gleiche Class wird beim #link3 nachfolgend nochmal aufgerufen ???*/

    #link3:hover ~ .hovgroup2 {
    display: block;
    }


  • <a id="link1" href="www.mobile.de">Link1</a>
    <a id="link2" href="wwww.ebay.de">Link2</a>
    <a id="link3" href="www.autoscout24.de">Link3</a>
    /*Diesen Bereich verstehe ich, Links mit einer URL und einer ID als Marker */

    <div class="hovgroup3" id="hovele1">
    Hoverelement 1
    </div>
    /*Verstehe ich nicht, das DIV ruft eine Class "hovgroup3" auf, die aber nirgends definiert ist ??? und hat eine Zuweisung als ID, ok */

    <div class="hovgroup2 hovgroup3" id="hovele21">
    Hoverelement 2.1
    </div>
    /*Verstehe ich nicht, da für mich die class im <Style> nur mit dem Element display:block definiert ist und zudem die ID #hovele21 auch im nachfolgenden Div verwendet wird ??? */

    <div class="hovgroup2 hovgroup3" id="hovele21">
    Hoverelement 2.2
    </div>
    /Verstehe ich nicht, analog Punkte zuvor */

    <div class="hovgroup3" id="hovele3">
    Hoverelement 3
    </div>
    /Verstehe ich nicht, analog Punkte zuvor */

    Wenn mir jemand das Ding erklären könnte wäre ich sehr verbunden,
    da ich das gerade wie man sieht nicht richtig nachvollziehen kann.
Danke vorab.
 
Zuletzt bearbeitet:
Werbung:
@Aaron3219: Auch an Dich vielen Dank für den tollen Vorschlag und die Optimierungen, ich hätte trotzdem noch eine Frage.
  1. Die Lösung, dass im Link3 jetzt alle vorherigen Hovers´s angezeigt werden passt, aber wie kann man das Ganze denn machen das auch die gleichen Positionen der Link1 und Link2 Hover´s aufleuchten ? Also das Link3 genau diese Hover´s der Links 1 und 2 ansteuern???
  2. Wie mache ich den "ganzen" Button zum Link (ja ich füge eine <a> ein, bei einem Div würde ich für das <a> dann ein Display: block setzen damit das ganze Div zur Linkfläche wird) aber damit der Link nicht nur auf der Schrift reagiert sondern auch der ganze Button als Linkfläche agiert, analog zum Hover Reaktionsfläche?
 
Also ich beantworte meine Fragen auch mal.
Ich beantworte Frage 2 zuerst:

Also es gibt den einfachen Weg und den etwas schwereren:
Weg 1:
Ganz simpel. Pack doch den <a> Tag nicht in den Button Tag, so dass nur die Schrift angesprochen wird. Mach es so:
HTML:
<a href="https://www.google.de/"><button class="button" id="link1" style="float: left;">Link1</button></a>

Oder Weg 2 (meiner Meinung nach der saubere Weg):
Benutz einfach Javascript:
HTML:
<button onclick="window.location.href='https://www.google.de/'" class="button" id="link1" style="float: left;">Link1</button>

Der Einzeiler ist ja leicht zu merken:
window.location.href='https://www.google.de/'

das onclick kennst du sicher schon. Falls nicht: Es sagt, was passieren soll, wenn du auf den Button klickst.


Frage 1 beantworte ich, sobald ich den Code dafür geschrieben habe. Aber eigentlich solltest du das ja selber Versuchen. Woran hängt es also?

edit: Ach ja, durch beide Varianten bekommst du keinen Link-Cursor. Einfach im style Element verändern

edit2: und denke daran, dass so etwas wie Google existiert. Die Frage nach dem Link für den Button findet man bestimmt bei Google
 
So nach reichlich rumprobieren jetzt meine Lösung. Die könnte vllt. komplizierter sein als es sein müsste, aber sie funktioniert.
Willkommen zu einer kleinen Javascript-Stunde:
Doch bevor wir zu Javascript kommen, hier erst die HTML veränderungen:
HTML:
<div class="hovgroup3" id="hovele1">                     
      <div id="element1">
            <button class="geheim text">Ich bin der Link 1-1</button>
            <button class="geheim text">Ich bin der Link 1-2</button>
            <button class="geheim text">Ich bin der Link 1-3</button>
      </div>                     
</div>

und Link 3 wurde zu:
HTML:
<button onmouseover="Element()" onmouseout="hide()" class="button" id="link3" style="float: left;">Link3</button>   
<div id="element2" class="hovgroup2 hovgroup3">
</div>


So nun zum Javascript:
Folgendes passiert. Durch Javascript klone ich (in diesem Falle) alle Elemente von Link 1 mithilfe dieses Codes:
Code:
function Element() {
                var eins = document.getElementById("element1");
                var zwei = eins.cloneNode(true);
                zwei.id = "test";
                document.getElementById("element2").appendChild(zwei);
                }
            function hide() {                         
                var element = document.getElementById("test");
                element.remove(element);                         
            }

Danach entferne ich das eben kopierte wieder.
Code:
function hide() {                         
                var element = document.getElementById("test");
                element.remove(element);                         
            }

Wichtig ist, dass die ID in function Element() schon geändert wird, ansonsten entfernt man ja auch das ID-Element "Link1", der durch das Klonen ja die exakte ID hat. Diese eben neu erzeugte ID="test" enthält nun alles aus ID="element1" und ich kann ID="test" einfach entfernen.
 
Werbung:
@Sempervivum und @Aaron3219 :
Vielen Dank für die ausführliche Erklärung, der Groschen ist zwar noch nicht vollständig gefallen, aber ich bin einiges weiter gekommen. Ebenfalls Klasse sind eure sehr ausführlichen Beispiele, echt super ! Danke! :)

Jedoch habe ich noch zwei weitere Fragen, die mir @Aaron3219 schon über JS zeigen wollte.

1. Gibt es keine Möglichkeit mit HTML / CSS wie im nachfolgenden Beispiel unter Link5 wo ein weiterer Hover und die Hovers der Links 1, 2, 3 und 4 aufgerufen werden, ohne diese im Code unter Link5 nochmals alle schreiben zu müssen? (Der Sinn dahinter ist, den Code nicht länger als erforderlich zu machen , wenn ich also Link 1 bis 4 einfach über die ID nochmals ansprechen könnte, dann hätte ich die für mich perfekte Lösung gefunden) ???
Oder ist dies nur mit JS möglich ?

2. Wenn ich die Div´s im Style positioniere, wie auch hier im Beispiel, kenne ich den genauen Pixelabstand nach oben nicht, (Im Beispiel gehe ich dann von aktuellen Link/Hoverelement mit top: -180px etc. nach oben, allerdings poppen die Hovers nun nicht 100% an der gleichen Stelle auf, da ich den wirklichen Abstand nach oben nicht kenne, je nach dem welche Elemente eben dazwischen eingebaut werden, es sind dann 1-2pixel Unterschied ... Gibt es eine Möglichkeit die Höhe zu ermitteln bzw. die Elemente auf die gleiche Position wie vorher zu bringen? (Man merk den Untschied wenn man zwischen Link4 und 5 schnell hin und her switcht), gleiches Problem wenn ich dazwischen nur eine Schriftgröße ändere.




HTML:
<!DOCTYPE html>
<html>
 
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>Onlinestatus</title>
<style>
    .main {
        width: 90%;
        background-color: red;
        display: block;
        z-index: 0;
        position: relative;
        font-family:Arial, Helvetica, sans-serif;
        margin:0 auto;
        padding:20px;
    }
    div.button {
        background-color: green;
        position:relative;
        color: white;
        width: 10em;
        height:3.0em;
        padding:0.5em;
    }
    .button:hover > .geheim {
        display: block;
        z-index: 4;
    }
    .alink {
        color: white;
        font-size:1.8em;
        text-decoration:none;
        text-align:center;
        display:block;
        padding-top:10px;
    }
    .alink:hover {
        color:yellow;
    }
    .geheimdiv {
        width:100%;
        position:absolute;
        bottom:0;
        line-height: normal; /*da sonst von Elternteil 4em übernommen wird */
        margin-top: 0; /* erforderlich, da <p> standardmäßig oben und unten einen Abstand hat */
        margin-bottom: 0;     
    }
  
    .geheim {
        position:absolute;
        color:black;
        font-size:xx-small;
        text-align:center;
        display: none;
        border:2px black solid;
    }
     .geheim2 {
        width: 160px;
        height:6.8em;
        top: 0px;
        left: 180px;
        background-color: rgba(70,170,70, 0.8);
    }
    .geheim22 {
        width: 160px;
        height:6.8em;
        top: 0px;
        left: 350px;
        background-color: rgba(70,170,70, 0.8);
    }
    .geheim3 {
        width: 160px;
        height:6.8em;
        top: 0px;
        left: 180px;
        background-color: rgba(255,255,150,0.8);
    }
    .geheim4 {
        width: 160px;
        height:6.8em;
        top: 0px;
        left: 180px;
        background-color: rgba(255,255,150,0.8);
    }
    .geheim42 {
        width: 160px;
        height:6.8em;
        top: -115px;
        left: 350px;
        background-color: rgba(255,255,150,0.8);
    }
    .geheim43 {
        width: 160px;
        height:6.8em;
        top: -230px;
        left: 520px;
        background-color: rgba(255,255,150,0.8);
    }
    .geheim44 {
        width: 160px;
        height:6.8em;
        top: -345px;
        left: 690px;
        background-color: rgba(255,255,150,0.8);
    }
  
    .geheim5 {
        width: 160px;
        height:6.8em;
        top: 0px;
        left: 180px;
        background-color: rgba(150,230,230,0.8);
    }
      .geheim52 {
        width: 160px;
        height:6.8em;
        top: -345px;
        left: 180px;
        background-color: rgba(70,170,70, 0.8);
    }
    .geheim522 {
        width: 160px;
        height:6.8em;
        top: -345px;
        left: 350px;
        background-color: rgba(70,170,70, 0.8);
    }
    .geheim53 {
        width: 160px;
        height:6.8em;
        top: -230px;
        left: 180px;
        background-color: rgba(255,255,150,0.8);
    }
    .geheim54 {
        width: 160px;
        height:6.8em;
        top: -115px;
        left: 180px;
        background-color: rgba(255,255,150,0.8);
    }
    .geheim542 {
        width: 160px;
        height:6.8em;
        top: -230px;
        left: 350px;
        background-color: rgba(255,255,150,0.8);
    }
    .geheim543 {
        width: 160px;
        height:6.8em;
        top: -345px;
        left: 520px;
        background-color: rgba(255,255,150,0.8);
    }
    .geheim544 {
        width: 160px;
        height:6.8em;
        top: -460px;
        left: 690px;
        background-color: rgba(255,255,150,0.8);
    }
.tooltip {
    position: relative;
    display: inline-block;
    border-bottom: 1px dotted black; /* If you want dots under the hoverable text */
}

.tooltip .tooltiptext {
    visibility: hidden;
    width: auto;
    background-color: rgba(255,255,0,1);
    color: black;
    text-align: center;
    padding: 1px;
    border-radius: 0;
    left:0px;
    top:-1.75em;
    font-size:x-small;
    font-family:Arial, Helvetica, sans-serif;
       font-weight:bold;
       line-height:1.3em;
   position: absolute;
    z-index: 5;
}
.tooltip:hover .tooltiptext {
    visibility: visible;
} 
    </style>
</head>
<body>
    <div class="main">
        <div class="button tooltip">
            <span class="tooltiptext">Hier könnte ein x-beliebiger Text stehen
            </span>
            <a class="alink" href="#">Link-2:
            </a>
            <div class="geheim geheim2">
            <p class="geheimdiv">Ich bin aber Link-2 .... <!-- Hier ist das Div, dass als Markierung dient -->
            </p>
        </div>
            <div class="geheim geheim22">
            <p class="geheimdiv">Ich bin aber Link-2-2 .... <!-- Hier ist das Div, dass als Markierung dient -->
            </p>
        </div>
        </div>
        <p>
        Bla bla bla blubb - Bla bla bla blubb - Bla bla bla blubb - Bla bla bla blubb
        </p>
        <div class="button tooltip">
            <span class="tooltiptext">Hier könnte ein x-beliebiger Text stehen
            </span>
            <a class="alink" href="#">Link-3:
            </a>
            <div class="geheim geheim3">
            <p class="geheimdiv">Ich bin aber Link-3 .... <!-- Hier ist das Div, dass als Markierung dient -->
            </p>
        </div>

        </div>


        <p>
        Bla bla bla blubb - Bla bla bla blubb - Bla bla bla blubb - Bla bla bla blubb
        </p>
        <div class="button tooltip">
            <span class="tooltiptext">Hier könnte ein x-beliebiger Text stehen
            </span>
            <a class="alink" href="#">Link-4:
            </a>
            <div class="geheim geheim4">
            <p class="geheimdiv">Ich bin aber Link-4 .... <!-- Hier ist das Div, dass als Markierung dient -->
            </p>
        </div>
            <div class="geheim geheim42">
            <p class="geheimdiv">Ich bin aber Link-4-2 .... <!-- Hier ist das Div, dass als Markierung dient -->
            </p>
        </div>
            <div class="geheim geheim43">
            <p class="geheimdiv">Ich bin aber Link-4-3 .... <!-- Hier ist das Div, dass als Markierung dient -->
            </p>
        </div>
            <div class="geheim geheim44">
            <p class="geheimdiv">Ich bin aber Link-4-4 .... <!-- Hier ist das Div, dass als Markierung dient -->
            </p>
        </div>
        </div>
      

        <p>
        Bla bla bla blubb - Bla bla bla blubb - Bla bla bla blubb - Bla bla bla blubb
        </p>
        <div class="button tooltip">
            <span class="tooltiptext">Hier könnte ein x-beliebiger Text stehen
            </span>
            <a class="alink" href="#">Link-1-4+5:
            </a>
            <div class="geheim geheim5">
            <p class="geheimdiv">Ich bin aber Link-5 .... <!-- Hier ist das Div, dass als Markierung dient -->
            </p>
        </div>
            <div class="geheim geheim54">
            <p class="geheimdiv">Ich bin aber Link-4 .... <!-- Hier ist das Div, dass als Markierung dient -->
            </p>
        </div>
            <div class="geheim geheim542">
            <p class="geheimdiv">Ich bin aber Link-4-2 .... <!-- Hier ist das Div, dass als Markierung dient -->
            </p>
        </div>
            <div class="geheim geheim543">
            <p class="geheimdiv">Ich bin aber Link-4-3 .... <!-- Hier ist das Div, dass als Markierung dient -->
            </p>
        </div>
            <div class="geheim geheim544">
            <p class="geheimdiv">Ich bin aber Link-4-4 .... <!-- Hier ist das Div, dass als Markierung dient -->
            </p>
        </div>
            <div class="geheim geheim53">
            <p class="geheimdiv">Ich bin aber Link-3 .... <!-- Hier ist das Div, dass als Markierung dient -->
            </p>
        </div>
            <div class="geheim geheim52">
            <p class="geheimdiv">Ich bin aber Link-2 .... <!-- Hier ist das Div, dass als Markierung dient -->
            </p>
        </div>
            <div class="geheim geheim522">
            <p class="geheimdiv">Ich bin aber Link-2-2 .... <!-- Hier ist das Div, dass als Markierung dient -->
            </p>
        </div>
      
        </div>
      
    </div>
</body>
 
</html>
 
Zuletzt bearbeitet:
Also Frage 1 kann ich schon mal beantworten:
Ich habe wirklich ein paar Stunden an deinem Problem gesessen und bin am Ende nur mit Javascript weitergekommen. Das Problem ist, dass Dinge in html ja an einen bestimmten Platz gesetzt werden. Wenn ein div oder button an einer bestimmten Stelle gesetzt wird, kannst du es NUR mit position: absolute; irgendwo im Raum und unabhängig von anderen Dingen bewegen. Außerdem kannst du Elemente, unabhängig von dem position attribut, ausblenden und einblenden lassen. Jedoch ist es unmöglich, diese festen html Elemente auf einmal an eine andere Stelle zu setzen. Auch Klonen ist in html unmöglich. Also von meiner Perspektive aus, ist es erstmal unmöglich.

Jetzt ist mir mit position: absolute noch eine Idee gekommen. Man könnte ja theoretisch durch das hovern auf Link 5, die position-attribute auf Link5 setzen.
Der Sinn dahinter ist, den Code nicht länger als erforderlich zu machen
Doch das ist seeeeeehr umständlich lang. Ich erklär dir außerdem mal, warum meine Musterlösung für den Code nur halb so lang ist wie deiner.
Also:
Du erstellst für JEDEN einzelnen button ("Ich bin aber Link2..." etc.) eine Klasse wie z.B. "geheim52" etc.
Das heißt, du musst für JEDE einzelne Klasse die positionswerte angeben und für JEDEN einzelnen link eine Klasse anlegen. Das sind bei deinem neusten Beispiel schonmal 7 Klassen mit jeweils 7 Zeilen Code. Das sind schonmal 49 Zeilen extra. Bei meinem Beispiel habe ich die position nicht absolut gesetzt. Denn ich habe die buttons (mit divs geht das aber auch) einfach nebeneinander gesetzt. Das funktioniert durch das setzen des floats.
Also z.B.
float: left;

Bei Frage 2 erkenne ich das genannte Problem gar nicht. Ich habe dein Beispiel ausprobiert und bei mir gibt es keine Pixelverschiebung. Außerdem weiß ich nicht, von welchen divs du nicht den Abstand zur höhe ermitteln kannst. Ich kann dir schonmal sagen, dass das mit den absolut gesetzten Elementen schlecht aussieht.
Warum nimmst du denn eigentlich nicht meine Musterlösung mit den buttons?
 
@Aaron3219:

Warum nimmst du denn eigentlich nicht meine Musterlösung mit den buttons?

Die Lösung mit den Buttons wird genutzt :) .... hatte aber das Beispiel deswegen mit den DIVS da ich es anders nicht hinbekommen habe, aber jetzt habe ich nach wie vor Probleme damit ...

Da ich mit JS absolut keine Erfahrung habe, fällt mir das ändern oder nachverfolgen sehr schwer.


Mit JS sieht die Lösung vor dem Hoover so aus .... das rote Div ist zu kurz, obwohl mit .main {height:100% } definiert ist?

upload_2017-6-20_15-47-3.png
Nach dem Hoover sieht es so .... das rote Div ist groß genug, und die Hoovers des Link 1 werden angezeigt, ABER ....
1. die Hoovers von Link 2 nicht und
2. nicht an der richtigen Stelle, die Hoovers sollen auch an der Stelle aufpoppen, wo sie beim Überfahren von Link 1 oder Link 2 dann stehen würden, und wenn unter Link3 noch ein weiteres Hoover stehen würde, müsste es da stehen wo jetzt die Hoovers 1-1 bis 1-3 stehen. (Siehe analog mein vorheriges Beispiel)
Da ich künftig mehr als 3 Links brauche, muss ich wissen wie ich das JS erweitern kann, sonst ist es leider für mich nicht verwendbar :(


upload_2017-6-20_15-49-43.png


Ich weiß deine Mühe wirklich zu schätzen und will es nicht überstrapazieren, aber es wäre super wenn Du mir da noch helfen könntest o_O:)
 
Werbung:
Zur 2. Frage, Problem taucht nur im Firefox auf, nicht in Chrome:

upload_2017-6-20_16-11-56.png

Hier der Unterschied wenn ich bei Link-1-4+5 hoover, es ist ein Absatz zu sehen, wenn mann die Schrift von "Bla bla ..." ändern würde passt die Angabe top: - 180px; auch nicht mehr und würde auch zu einem Absatz führen und wie ich mit Float in Verbindung mit JS dann das richtig anordne weiß ich nicht :confused:

upload_2017-6-20_16-15-15.png
 
Mal eine Frage. Warum sollen im 3. Link alle anderen Links erscheinen? Macht irgendwie aus meiner Sicht kein Sinn. Vielleicht kannst Du uns/ mir diese Frage beantworten.
 
Zurück
Oben