Opacity funkt nicht ?

  • Ich habe untereinander mehrere Texte mit SPAN für Einblendung von Texten, wenn mit der Maus darübergefahren wird oder darauf geklickt wird.

    <a href='#' class='info'>M04-E06<span>Mitte April - Ende Juni</span></a>
    Solche Felder werden mit ähnlichen Feldern untereinander dargestellt. Da die eingeblendete Info gut leserlich sein soll, dürfen die darunterliegenden Informationen nicht durchscheinen. Darunter gibt es noch eine Legende:
    <p class='legende'>Erklärung:...</p>

    Habe folgende CSS-Definitionen:

    Zitat

    a.info { color:#4E6363; text-decoration-style: dotted; text-decoration-line: underline; font-weight: normal; }
    a span {display: none; position: absolute; color:#ccffff; background:#008800; padding: 5px; opacity:1.0 !important;} !important
    a {position: relative; color:ivory4; }
    a:hover span {display: block; text-align: center; font-family:Arial,sans-serif; opacity:1.0 !important; } !important

    Trotz des außerhalb der '}' befindlichen 2. !important , was scheinbar fehlerhaft ist, funktioniert alles bestens, sowohl in Firefox als auch im Edge.

    Wenn dieses !important außerhalb der Definition jeweils weggenommen wird, wird beim Darüberfahren die Einblendung halb transparent dargestellt, wenn sich
    darunter solche gleichen Elemente befinden. Im Gegensatz dazu scheint die Legende, definiert durch

    Zitat

    .legende { max-width: 1200px; font-size: 90%; font-family:Arial,sans-serif; font-style:italic; text-align: left; }


    nicht transparent hindurch!?

    Vordergrund und Hintergrundfarbe des eingeblendeten Textes wird immer richtig dargestellt.

    • Offizieller Beitrag

    Hi,

    Zunächst mal: Das !important gehört in die jeweilige Definition und nicht außerhalb des Blocks!
    Weiterhin ist !important fast immer nur das Resultat eines Logik-Fehlers in der Wertigkeit von Styles.

    Beispiel:

    Code
    <div id="bar" class="foo">foobar</div>
    
    
    
    
    DIV { background:#c00; }
    DIV.foo { background:#0c0; }
    DIV#bar { background:#00c; }


    Der DIV würde hier am Ende einen blauen Hintergrund haben, weil jede Reger die vorige durch ihre Wertigkeit überschreibt.

    Drehst Du das mal um:

    Code
    <div id="bar" class="foo">foobar</div>
    
    
    
    
    DIV { background:#c00; }
    DIV#bar { background:#00c; }
    DIV.foo { background:#0c0; }


    , bleibt der DIV blau, denn eine ID hat eine höhere Wertigkeit, wie eine CLASS.
    Hier könnte man jetzt bei der CLASS-Rule !important verwenden, um die Wertigkeit der ID zu "überschreiben", aber die sinnvollere Variante ist, sein CSS und dessen Regeln sauber zu ordnen.

    Gruß Arne

  • zu deinem Bsp.:

    Hier wurden gleich mehrere Fehler gemacht welche man ausbessern muss damit es klappt, bzw es sauber ist ohne das du auf anderen Seiten oder später Probleme bekommst.

    Die erste Frage die sich mit stellt ist, warum muss es ein LinkTag sein wenn wer mit # markiert ist? Oder ist es derzeit nur ein DummyTag? Das !important ist wie es der Arne Drews bereits beschreibt nur nötig sofern man das CSS unsauber geschrieben hat, oder man über gewisse CSS definitionen die sich alle Gegenseitig beinflussen dafür zu sorgen das diese dennoch gesetzt werden wie zb.:

    CSS
    <div class="button absolute"></div> 
    
    
    div.button{ position: relative; }
    .absolute{ absolute !important; }

    in diesem Beispiel stelle ich somit sicher das ein Element dem ich die Klasse absolute gebe immer Absolute positioniert ist und kann somit diesem Button eine andere Positionierung geben als den Standardbuttons.

    Desweiteren setzt du deinen SPAN-Tag auf text-align = center. Ein SPAN-Tag ist jedoch ein fließendes Element welches so breit wie seine Inhalt ist (display = inline). Damit ist die CENTER definition in diesem kontekst nicht richtig. Auch eine reine WIDTH Angabe in dem SPAN-Tag würde nicht direkt den gewünschten erfolg bringen. Erst wenn das Fließverhalten des SPAN-Tags ändert kann man hier auch die Breite des Elements verändern. Hier empfehle ich dem SPAN-Tag zu einer Mischform aus Blockelement und Fließelement zu machen. Quasi ein inline-block (display: inline-block;) Damit kann man nun dem SPAN auch einen Breite geben.

    Desweiteren hat das !important nach der schließen Klammer der Cascadendefinition nix zu suchen. Denn das macht dein CSS invalid und die nachfolgende Zeile wird nicht ausgewährtet.

    Aber hier ein Beispiel wie es klappt ohne eine Breitenangabe.

    Bitte :)

  • Danke für die ausführliche Antwort. Ein paar Kommentare zunächst:

    - Das Beispiel mit dem LinkTag habe ich so auf einer Webseite gefunden.
    - Das mit dem !important außerhalb der Klammer beschreibe ich ja, dass das ein Fehler ist. Nur mit dem Fehler funktioniert es sowohl in Firefox als auch im Edge wie ich mir das auch wünsche. Das ist ja das komische. Nachdem ich herangegangen bin Fehler im CSS auszubessern, welches mir ein Tool anzeigt, ist der Fehler in der Anzeige aufgetaucht.
    - Ich habe nirgends woanders opacity oder transparent definiert, ist also völlig überflüssig. Dies zeigt auch in Firefox Entwickler-Werkzeug / Element untersuchen an.

    Glaube, da gibts noch ein Mißverständnis. Ich möchte den Span-Text nicht als Zeile, sondern als Block ausgeben, dieser soll den Text herum überdecken, solange man mit der Maus darauf ist. Bei deinem Beispiel wird der Folgetext verschoben, was nicht sein soll. Um den eingeblendeten Text besser lesen zu können, hat er auch eine Hintergrundfarbe... Schau dir mal den Link https://garteln.info/events.php?pflanze=Gurken&monat=da funktioniert es auch. Allerdings mit dem blöden CSS-Fehler !important außerhalb der Klammer. Wenn ich den weglasse, wird die Schrift des eingeblendeten Blocks transparent, allerdings nur, wenn sich andere solche Elemente im Hintergrund befinden. Befindet sich im Hintergrund ein Text z. B. mit <p>, besteht das Problem nicht.

    Hoffe, ich habe das Problem jetzt besser umrissen.

  • Danke, das Beispiel hat mir geholfen. Habe jetzt folgende CSS-Definitionen:

    Zitat

    a.info { color:#4E6363; text-decoration-style: dotted; text-decoration-line: underline; font-weight: normal; }
    a span {display: hidden; position: absolute; color:#ccffff; background:#008800; padding: 5px; z-Index: 1; }
    a {position: relative; color:ivory4; }
    a:hover span {display: block; text-align: center; font-family:Arial,sans-serif; visibility: visible; }

    Bei 'a span' kam 'z-Index: 1' hinzu, bei 'a:hover span' visibility: visible'

  • - - - Aktualisiert - - -

    Okay ich habe mir mal deine HTML Strucktur angeschaut. Folgendes Fällt mir hier sofort ins Auge was mir ein Augenbluten verursacht XD

    Und zwar baust du eine tabellarische Strucktur auf. Was ich generell erstmal gut finde ist das du keine Table verwendest :), aber man sollte sein HTML semantisch dennoch tabellarisch zusammen stellen.

    dazu kommen einige CSS Fehler, wie zb das du SPAN-Elemente linksbündig floatest. Das ist unnötig das SPAN-Elemente standardmäßige Fließelemente sind. Somit reihen diese Sich sowieso nebeneinander an.

    Aber um noch schnell deine Frage zu beantworten warum das mit den "!important" nach der klammer funktioniert liegt daran das du mit dem !important das CSS invalid machst. Somit wird die nachfolgende Zeite

    CSS
    a span {display: none; position: absolute; color:#ccffff; background:#008800; padding: 5px; opacity:1.0 !important;} [COLOR=#ff0000]!important[/COLOR]
    [COLOR=#ff0000][U]a {position: relative; color: ivory4; } [/U][/COLOR]

    Somit wird diese Zeile nicht interpretiert: a {position: relative; color: ivory4; }
    Wenn du nun das !important nach der Klammer entfernst wird diese Zeile wieder gelesen und eine color: ivory4 gibt es nicht. Somit kann es sein das dein Text aufeinmal nicht mehr sichbar ist.


    Ich würde dir eine eine folgende HTML Strucktur empfehlen:

    Diese ist a leserlicher und leichter zu erweitern um neue Zeilen. Desweiteren kann man diese Strucktur auch besser in ein extra Template auslagern und Inhalte Serverseitig schneller durch eine Schleife generieren. Auf die unnötigen Links würde ich an deiner Stelle verzichten. Da diese nur unnötige Verwirrung stiften und keine relevants haben. Desweitern würdest du SEO (Search Engine Optimising) eine auf den Deckel bekommen. Da hier viele Links generiert sind die alle keine relevants haben. Jedoch aber Links von einer Surchmaschine also relevanter Inhalt ausgelesen werden. Desweitern sind H3,H4 .. Tags obsolet und sollten auch nicht mehr verwendet werden. Hx-Tags sind Auszeichnungselemente und eine Seite sollte nur noch mit einer H1 Überschirft und ansonsten mit H2 Überschriften für relevante Unterpunkt ausgezeichnet werden. Desweitern ist zu berücksichtigen das im H1-Tag der Text sich mit der Headline gleicht (Sofern man kein Breadcrump in den <title> einbaut.

    Desweitern empfehle ich dir bei dein CSS das du Elemente die gleiche Eigenschaften Teilen diese auch zusammen fassen solltest. So sparst du dir, ofte Wiederholungen und falls du mal ein Element in der Farbe ändern willst musst du das nicht an x stellen machen, sondern nur an einer. Darüberhinaus ist das CSS schlanker und damit schneller geladen, was die bei Suchmaschinen auch wieder ein Pluspunkt bringt ;)

    So das wars erstmal von mir wieder. Ich hoffe ich konnte etwas licht ins Dunkle HTML Wesen bringen :D


    Lg