Это CSS Reset хорошо? - PullRequest
       46

Это CSS Reset хорошо?

4 голосов
/ 01 августа 2011

Я собирался использовать сброс CSS Эрика Мейера, но наткнулся на некоторые кросс-браузерные различия (например, поля input).Исходя из этого, я придумал более агрессивный подход:

(Это устарело. Не забудьте проверить текущую исправленную версию в конце этого вопроса и критиковать ее по своему желанию)

/* 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;
}

Работает без сбоев во всех протестированных браузерах:

  • IE7
  • IE8
  • Chrome (новейший)
  • Firefox (новейший)
  • Opera (новейший)

Вопрос: кто-нибудь видит здесь какие-либо проблемы?Я считаю себя не очень хорошим в CSS, поэтому я не знаю, если это вызовет у меня какие-либо проблемы в будущем.

Obs.: этот сброс только для кросс-браузерных проблем,За ним (или обязательно!) Должны следовать общие правила для таких элементов, как input, a, code и т. Д. (Например: input типа "text" будет невидимым без границ!). Я буду добавлять такие вещи, как общие a стили и прочее позже.Сейчас я перезагружаю вещи, избавляясь (почти) от всего, что не совпадает в основных браузерах.


ПРОБЛЕМЫ УДАЛЕНЫ ТАК ЧАСТО

  • Селектор * может вызвать проблемы с производительностью.

  • Селектор * с некоторыми правилами переопределяет некоторые стили элементов по умолчанию так, как они не могут бытьвыздоровел.Например: стиль по умолчанию для input типа «submit».

  • Удивительно, но :before, :after { content: ''; } ломал элементы выбора в Firefox.

  • В исправленной версии я попытался установить margin: 0 для всех элементов ввода.Большинство браузеров игнорировали его для типов ввода checkbox и radio.


ПЕРЕСМОТРЕННАЯ ВЕРСИЯ

/* 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;
}

END

Ну, чем больше я пытался улучшить свой сброс, тем больше это выглядело как сброс Мейера css , поэтому я сдался и принял его.работает просто отлично: p

Ответы [ 4 ]

6 голосов
/ 01 августа 2011

Я вообще считаю, что обширные сбросы CSS не самые лучшие. Я согласен с Рассом Уикли, который "сосредоточился" на трех больших проблемах:

  1. Каждый сбрасываемый элемент должен быть переопределен. Размер файла CSS и его обслуживание могут увеличиться.
  2. Вы можете забыть переустановить то, что сбросили.
  3. Некоторые сбросы вредны для пользователей, которые используют клавиатуру для навигации.

Смотрите всю его презентацию здесь: http://www.maxdesign.com.au/articles/css-reset/

В частности, я думаю, что следующее не должно сбрасываться, как в вашей таблице стилей

: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 - проблема доступности.

ol и ul должны иметь свои стили по умолчанию. Вы, вероятно, нуждаетесь в них. (Хотя вам может потребоваться перезаписать их для навигации.)

:link, :visited, :hover, :active Я бы сбросил их только при необходимости.

Как было упомянуто и подтверждено вами *{ // } может вызвать проблемы с производительностью и может привести к непредвиденным проблемам.

Кроме того, я хотел бы рассмотреть возможность добавления чего-либо для сброса больших верхних и нижних полей заголовков

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

4 голосов
/ 01 августа 2011

Это использует *, который повлияет на все.Вы не можете получить границы для input, select и т. Д. Обратно с "более поздней" таблицей стилей.

Кроме того, * считается плохим для производительности .Использование явных тегов предпочтительнее.

Попробуйте сброс html5boilerplate , если у вас возникли проблемы с Эриком (не уверен, решит ли это их, но стоит попробовать)

1 голос
/ 01 августа 2011

Меня беспокоит только проблема производительности, вызванная использованием * селектора

0 голосов
/ 01 августа 2011

Я не вижу никаких проблем с ним, если вы проверили его, и он работает, то все должно быть в порядке.

...