uepselon: Eigenschaften vererben

Hi,

huh jetzt war ich ja schon länger nicht mehr aktiv im Forum beteiligt, liegt wohl daran, dass ich meine Web-Probleme inzwischen zu 99 % selbst löse.

Hab gerade ein Problem und wollte mir diesbezüglicg fachmännsichen Rat einholen.
Und zwar ist es möglich in CSS ne Klasse zu bestimmen und diese dann zu vererben?

Hab dazu leider noch nichts gefunden.

Hier mal ein kleines Beispiel was ich vor habe:

Standrad Definition für Tabellen:

table.standard { Attribute }
th.standard { Attribute }
td.standard { Attribute }

Spezifische Tabellen Definition:

table.login { Attribute }
th.login { Attribute }
td.login { Attribute }

So nun sollen  nicht alle spezifischen Tabellen eigene Attribute rehalten sondern von der Standard Tablle erben.

Hab das jetzt mal mit "extends" exemplarische dargestellt, gibts in CSS zwar nicht aber so in der Art sollte es doch gehen?

table.login extends table.standard
th.login extends table.standard
td.login extends table.standard

So kann z.B. der Table Head einzeln für Login Tabellen angepasst werden, während der Rest aus der Standard Definition kommt.

Wie löst man sowas "richtig" in CSS? Bzw. wie ist es am besten generell vorzugehen.

Gruß,
ueps

  1. hi,

    Standrad Definition für Tabellen:

    standrad? du meinst sowas wie stützräder am kinderfahrrad ...?
    *scnr*

    So nun sollen  nicht alle spezifischen Tabellen eigene Attribute rehalten sondern von der Standard Tablle erben.

    Hab das jetzt mal mit "extends" exemplarische dargestellt, gibts in CSS zwar nicht aber so in der Art sollte es doch gehen?

    table.login extends table.standard
    th.login extends table.standard
    td.login extends table.standard

    du kannst dich im class-attribut auf mehrere klassen beziehen,

    <table class="standard login">

    damit übernimmt die tabelle zunächst die formatierungen, die in .standard angegeben sind, und anschliessend die aus .login.
    dabei überschreiben in .login gemachte angaben ggf. in .standard gemachte angaben zu den gleichen CSS-properties.

    gruss,
    wahsaga

    1. Hi,

      standrad? du meinst sowas wie stützräder am kinderfahrrad ...?
      *scnr*

      Öhm, ja mit nem Standrad kippt das Layout nicht so schnell um ;-)

      dabei überschreiben in .login gemachte angaben ggf. in .standard gemachte angaben zu den gleichen CSS-properties.

      Das ist ja das Problematische, ich will völlig getrennte Layouts.
      Sprich wenn in .standard die Tabelle einen Rahmen bekommt und in .login nur eine Hintergrungfarbe gesetzt wird, bleibt der Rahmen trotzdem erhalten. Soll er aber nicht, es sollen nur noch die Attribute von .login gelten.

      Gruß,
      ueps

      1. Hallo,

        Sprich wenn in .standard die Tabelle einen Rahmen bekommt und in .login nur eine Hintergrungfarbe gesetzt wird, bleibt der Rahmen trotzdem erhalten. Soll er aber nicht, es sollen nur noch die Attribute von .login gelten.

        Dann muss man in .login eben die andern Werte explizit ueberschreiben.

        N.B. Der Selektor muss spezifischer sein oder weiter unten im CSS vorkommen.

        Gruesse,

        Thomas

      2. hi,

        Das ist ja das Problematische, ich will völlig getrennte Layouts.
        Sprich wenn in .standard die Tabelle einen Rahmen bekommt und in .login nur eine Hintergrungfarbe gesetzt wird, bleibt der Rahmen trotzdem erhalten. Soll er aber nicht, es sollen nur noch die Attribute von .login gelten.

        warum behauptest du dann, du wolltest _vererbung_?
        nach dieser formulierung willst du doch offensichtlich _keine_ vererbung?

        gruss,
        wahsaga

        1. warum behauptest du dann, du wolltest _vererbung_?

          naja sagen wir, ich will dummy Klassen mit Defaultwerten einer Standard Klasse füllen.

          Gruß,
          ueps

          1. Hallo uepselon,

            naja sagen wir, ich will dummy Klassen mit
            Defaultwerten einer Standard Klasse füllen.

            Die Loesung hat wahsaga dir doch geschrieben. Du
            kannst die "Default"-Werte aus .standard in .login
            dann doch ueberschreiben.

            Gruesse,
             CK

            --
            Ganz gleich, welchen Weg ich wähle, ich kehre heim.
  2. Standrad Definition für Tabellen:

    table.standard { Attribute }
    th.standard { Attribute }
    td.standard { Attribute }

    warum dann nicht einfach:
    table { Attribute }
    th { Attribute }
    td{ Attribute }

    Spezifische Tabellen Definition:

    table.login { Attribute }
    th.login { Attribute }
    td.login { Attribute }

    Dann werden die nicht überschriebenen Eigenschaften vererbt.

    Struppi.

  3. Hi,

    table.standard { Attribute }
    th.standard { Attribute }
    td.standard { Attribute }

    schreibst Du allen Ernstes in jede Zelle <td class="standard">?
    Gerade wo Du von vererben redest:

    table.standard { attribute für table }
    table.standard td { attribute für alle tds innerhalb dieser tabelle }
    .standard { attribute für table, th und td }

    freundliche Grüße
    Ingo

    1. Hi Ingo,

      schreibst Du allen Ernstes in jede Zelle <td class="standard">?

      oh in der Tat , ja. Fehler von mir table.standard td {...} ist natürlich besser.

      Aber mein eigentliches Problem hat sich immer noch nicht geklärt.

      Ich will den Sachverhalt nochmal schildern.
      Ich hab verschiedene Tabellen zu Layoutzwecken, z.B. für ein Login-Formular, für ein Register-Form, für Redaktions-Artikel etc...

      All diese Tabellen erben CSS Attribute von ihren Klassen, login, register, article ...

      So nun sollen aber alle Klassen Standradmäßig gleich aussehen, also von einer Standard Klasse abgeleitet sein. Wenn nun ein Anwender sein Layout für das Login-Formular ändern will, muss er nur im CSS-Code die vererbung wegnehmen und seine Attribute hinzufügen.
      Die alten Standard werte müssen dann komplett weg sein, nicht nur vorhandene Werte überschrieben werden.

      Gruß,
      ueps

      1. Hi Ingo,

        schreibst Du allen Ernstes in jede Zelle <td class="standard">?

        oh in der Tat , ja. Fehler von mir table.standard td {...} ist natürlich besser.

        oder

        .standard table
        {

        }
        .standard table td
        {
        }

        Aber mein eigentliches Problem hat sich immer noch nicht geklärt.

        Ich will den Sachverhalt nochmal schildern.
        Ich hab verschiedene Tabellen zu Layoutzwecken, z.B. für ein Login-Formular, für ein Register-Form, für Redaktions-Artikel etc...

        All diese Tabellen erben CSS Attribute von ihren Klassen, login, register, article ...

        So nun sollen aber alle Klassen Standradmäßig gleich aussehen, also von einer Standard Klasse abgeleitet sein. Wenn nun ein Anwender sein Layout für das Login-Formular ändern will, muss er nur im CSS-Code die vererbung wegnehmen und seine Attribute hinzufügen.
        Die alten Standard werte müssen dann komplett weg sein, nicht nur vorhandene Werte überschrieben werden.

        Dann müssen die Standardwerte überschrieben werden

        Struppi.

      2. Hi,

        So nun sollen aber alle Klassen Standradmäßig gleich aussehen, also von einer Standard Klasse abgeleitet sein.

        und warum setzt du dann nicht einfach:

        table { allgemeine formatierung }
        th { allgemeine formatierung }
        td { allgemeine formatierung }
        .login td { spezielle formatierung }

        Wenn nun ein Anwender sein Layout für das Login-Formular ändern will, muss er nur im CSS-Code die vererbung wegnehmen und seine Attribute hinzufügen.
        Die alten Standard werte müssen dann komplett weg sein, nicht nur vorhandene Werte überschrieben werden.

        was ich jetzt zwar nicht ganz verstehe, aber du kannst jedes attribut doch auch wieder auf die standardwerte zurücksetzen - durch überschreiben, z.b. border:0 none;

        freundliche Grüße
        Ingo

        1. was ich jetzt zwar nicht ganz verstehe, aber du kannst jedes attribut doch auch wieder auf die standardwerte zurücksetzen - durch überschreiben, z.b. border:0 none;

          Eben dieses überschreiben will ich nicht. Die CSS Eigenschaften sind für Content Mangement System. Es gibt vorgefertigte Bausteine deren Look & Feel nur über CSS verändert werden kann. Möchte ein Kunde nun z.B. das aussehen der Login-Tabelle ändern, muss er umständlich erst die Werte überschreiben die er evtl. gar nicht haben möchte und dann sein Style einfügen. Ich will es so realisieren das er nur seinen Style schreiben muss ohne die Standardwerte zu überschreiben.

          Gruß,
          ueps

          1. Hallo,

            Ich will es so realisieren das er nur seinen Style schreiben muss ohne die Standardwerte zu überschreiben.

            Dann musst Du eben fuer _Deine_ Tabellen/Elemente spezifischere Selektoren nehmen,
            d.h. Klassen oder IDs.

            Solange Du nur definierst:
            table.layouttabelle { /* */ }
            table.layouttabelle>td, table.layouttabelle>th { /* */ }

            ist davon keine andere Tabelle betroffen.

            Weil table.layouttabelle>td von einigen kaputten Browsern nicht
            verstanden wird, musst Du halt eventuell auch den einzelnen
            Zellen noch eine ID/Klasse geben.

            Gruesse,

            Thomas

          2. hi,

            Eben dieses überschreiben will ich nicht.

            CSS heisst aber genau deshalb _cascading_ style sheets, weil es diese art von vererbung benutzt.

            wie Thomas schon sagte, wenn du die vererbung nicht willst, benutze andere, spezifischere selektoren.

            gruss,
            wahsaga

          3. Hi,
            Möchte ein Kunde nun z.B. das aussehen der Login-Tabelle ändern, muss er umständlich erst die Werte überschreiben die er evtl. gar nicht haben möchte und dann sein Style einfügen. Ich will es so realisieren das er nur seinen Style schreiben muss ohne die Standardwerte zu überschreiben.
            ich fürchte, das wird so nicht funktionieren, es sei denn, du ermöglichst das löschen sämtlicher (standard-)klassendefinitionen im css. aber mir ist bei der sache immer noch nicht klar, _wie_ der kunde sein css schreiben können soll.
            zugriff auf die ausgelagerte css-datei? dann wäre das löschen ja kein problem.
            zugriff auf eine (optional anzulegende) zusätzliche css-datei? dann müßtest du ihm eine entsprechende vorlage liefern, in der zuerst die bisherigen formatierungen überschrieben werden und er nue formatierungen anhängt. oder über ein script die überschreibungen für diesen fall selbst einbinden.

            freundliche Grüße
            Ingo