4 Stimmen

Ist dieser CSS-Reset in Ordnung?

Ich hatte vor, Eric Meyers CSS-Reset zu verwenden, aber ich bin über einige browserübergreifende Unterschiede gestolpert (wie input Ränder). Auf dieser Grundlage habe ich einen aggressiveren Ansatz entwickelt:

(Dies ist veraltet. Vergessen Sie nicht, die aktuelle, überarbeitete Version am Ende dieser Frage zu prüfen und nach Belieben zu kritisieren)

/* CSS Reset by Hugo Leonardo. Based on Eric Meyer's CSS Reset (just google it). */
* {
    margin: 0;
    padding: 0;
    border: 0;
    outline: 0;
    font: inherit;
    text-decoration: none;

    /* in case "font: inherit" fails (IE7) */
    font-family: "times new roman";
    font-size: 100%;
    font-style: normal;
    font-variant: normal;
    font-weight: normal;
    /* remove this block if you DON'T want to support lame browsers */
}

:before, :after {
    content: '';
}

:link, :visited, :hover, :active {
    color: inherit;
    color: #000; /* for IE7 'inherit' problem (again) */
    text-decoration: none;
}

:focus {
    outline: 0;
}

ol li, ul li {
    list-style: none;
}

table {
    /* "collapse" here is because of IE7 (maybe others?). don't remove it as it affects other browsers as well */
    border-collapse: collapse;
    border-spacing: 0;
}

/* this entire block was copied from Eric Meyer's CSS reset */
/* HTML5 "display" reset for older browsers */
article, aside, details, figcaption, figure, 
footer, header, hgroup, menu, nav, section {
    display: block;
}

Sie funktionierte in allen getesteten Browsern reibungslos:

  • IE7
  • IE8
  • Chrom (neueste Version)
  • Firefox (neueste Version)
  • Oper (neueste)

Die Frage ist: Sieht irgendjemand hier ein Problem? Ich halte mich für nicht so gut in CSS, so dass ich nicht weiß, ob dies mich in Zukunft in Schwierigkeiten bringen wird.

Obs.: dieses Zurücksetzen ist nur für browserübergreifende Probleme gedacht. Sie sollte (oder muss!) von allgemeinen Regeln für Elemente wie input , a , code und so weiter (z. B: input des Typs "Text" wäre ohne Rahmen unsichtbar!). Ich werde Dinge hinzufügen wie generische a Stile und andere Dinge später. Im Moment setze ich alles zurück und entferne (fast) alles, was in den wichtigsten Browsern nicht gleich ist.


BISLANG FESTGESTELLTE PROBLEME

  • En * Selektor könnte zu Leistungsproblemen führen.

  • En * Selektor mit einigen der Regeln überschreiben einige Standardstile von Elementen in einer Weise, dass sie nicht wiederhergestellt werden können. z.B.: der Standardstil eines input des Typs "Absenden".

  • Überraschenderweise ist die :before, :after { content: ''; } hat die Auswahl von Elementen in Firefox unterbrochen.

  • In der überarbeiteten Version habe ich versucht, die margin: 0 zu allen Eingabeelementen. Die meisten Browser ignorierten es für Eingaben vom Typ checkbox y radio .


ÜBERARBEITETE FASSUNG

/* CSS Reset by Hugo Leonardo Leão Mota
Based on Eric Meyer's CSS Reset: http://meyerweb.com/eric/thoughts/2011/01/03/reset-revisited/
Helped by fellows in stackoverflow: http://stackoverflow.com/questions/6892982/is-this-css-reset-okay */

/* resetting style for every visible element except 'ruby' family and form controls
   browsers deal with controls (and ruby style) in their own way */
a, abbr, acronym, address, b, big, blockquote, body,
br, caption, cite, code, col, colgroup, dd, del, dfn, div,
dl, dt, em, fieldset, form, h1, h2, h3, h4, h5, h6, hr, html, i,
img, ins, kbd, label, legend, li, noscript, object, ol, p, pre, q, samp,
small, span, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, ul, var {
    margin: 0;
    padding: 0;
    border: 0;
    outline: 0;
    font: inherit;
    text-decoration: none;

    /* in case "font: inherit" fails (IE7) */
    font-family: "times new roman";
    font-size: 100%;
    font-style: normal;
    font-variant: normal;
    font-weight: normal;
    /* remove this block if you DON'T want to support lame browsers */
}

/* browsers are free to handle controls but
   we can't let them mess up with the other elements  */
button, select, textarea,
input[type=text], input[type=password], input[type=submit],
input[type=image], input[type=reset], input[type=button], input[type=file] {
    margin: 0;
}

:link, :visited, :hover, :active {
    color: inherit;
    color: #000; /* for IE7 'inherit' problem (again) */
    text-decoration: none;
}

:focus {
    outline: 0;
}

ol li, ul li {
    list-style: none;
}

table {
    /* "border-collapse" here is because of IE7 different behaviour (maybe others?).
       don't remove it as it affects other browsers as well */
    border-collapse: collapse;
    border-spacing: 0;
}

/* the next two blocks were copied from Eric Meyer's CSS reset */

blockquote:before, blockquote:after, q:before, q:after {
    content: '';
}

/* HTML5 "display" reset for older browsers */
article, aside, details, figcaption, figure, 
footer, header, hgroup, menu, nav, section {
    display: block;
}

ENDE

Nun, je mehr ich versuchte, meinen Reset zu verbessern, desto mehr sah es so aus meyer's css reset also habe ich meins aufgegeben und es übernommen. funktioniert prima :p

6voto

Jason Gennaro Punkte 33907

Ich bin generell der Meinung, dass weitreichende CSS-Resets nicht das Beste sind. Ich stimme Russ Weakley zu, der sich auf drei große Bedenken konzentriert hat:

  1. Jedes Element, das zurückgesetzt wird, muss neu definiert werden. Die Größe der CSS-Datei und die Wartung können zunehmen.
  2. Sie könnten vergessen, etwas neu zu gestalten, das Sie zurückgesetzt haben.
  3. Einige Rücksetzungen sind schädlich für Benutzer, die für die Navigation auf Tastaturen angewiesen sind.

Sehen Sie hier seine gesamte Präsentation: http://www.maxdesign.com.au/articles/css-reset/

Insbesondere sollte das Folgende nicht zurückgesetzt werden, da es in Ihrem Stylesheet steht

:before, :after {
    content: '';
}

:link, :visited, :hover, :active {
    color: inherit;
    color: #000; /* for IE7 'inherit' problem (again) */
    text-decoration: none;
}

:focus {
    outline: 0;
}

ol li, ul li {
    list-style: none;
}

focus ist eine Frage der Zugänglichkeit.

ol y ul sollten ihre Standardstile haben. Sie werden sie wahrscheinlich brauchen. (Auch wenn Sie sie vielleicht für ein Nav überschreiben müssen.)

:link, :visited, :hover, :active Ich würde sie nur bei Bedarf zurücksetzen.

Wie bereits erwähnt und von Ihnen bestätigt *{ // } könnte zu Leistungsproblemen führen und unvorhergesehene Probleme verursachen.

Außerdem würde ich in Erwägung ziehen, etwas hinzuzufügen, um die großen oberen und unteren Ränder von Kopfzeilen zurückzusetzen

h1, h2, h3, h4, h5, h6 {margin-top:0; margin-bottom:0;}

4voto

Mrchief Punkte 72978

Dies ist die Verwendung von * was sich auf alles auswirken wird. Sie können keine Grenzen für input, select usw. wieder mit einem "späteren" Stylesheet einfügen.

Auch, * gilt als schlecht für Leistung . Die Verwendung expliziter Tags ist vorzuziehen.

Versuchen Sie html5boilerplate's zurücksetzen, wenn Sie Probleme mit Erics haben (nicht sicher, ob das die Probleme löst, aber einen Versuch wert)

1voto

Ahmad Alfy Punkte 12282

Meine einzige Sorge ist das Leistungsproblem, das durch die Verwendung des *-Selektors verursacht wird

0voto

Aaron Lee Punkte 1118

Ich sehe keine Probleme damit, wenn Sie es getestet haben und es funktioniert, sollte es in Ordnung sein.

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