CSS-расширение свойств класса

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

Теперь вместо копирования одного и того же кода - снова и снова для каждой кнопки - есть способ расширить кнопку и добавить только свойства, которые меняются.

пример два кнопки-css

.ask-button-display {
background: #8BAF3B;
border-radius: 4px;
display: block;
letter-spacing: 0.5px;
position: relative;
border-color: #293829;
border-width: 2px 1px;
border-style: solid;
text-align:center;
color: #FFF;
width:350px;
font-size: 20px;
font-weight: bold;
padding:10px;
}


.ask-button-submit {
background: #8BAF3B;
border-radius: 4px;
display: block;
letter-spacing: 0.5px;
position: relative;
border-color: #293829;
border-width: 2px 1px;
border-style: solid;
text-align:center;
color: #FFF;
font-weight: bold;
width:75px;
font-size: 12px;
padding: 1px;
}

и вот как я сейчас использую его в своем html

<a href="/" id="ask-question-link" class="ask-button-display">Ask a Question</a> <a href="/" class="ask-button-submit" id="ask-button-submit">Submit</a>

поэтому мне интересно, есть ли более чистый способ сделать это-как

.button {
/* PUT ALL THE COMMON PROPERTIES HERE */
}

AND THEN SOMEHOW EXTEND IT LIKE
.button #display {
/* THE DIFFERENT PROPERTIES OF Display BUTTON */
}

.button #ask {
/* THE DIFFERENT PROPERTIES OF Ask BUTTON */
}

но я не уверен, как это сделать. Спасибо за ваши вклады

7 ответов


Вы можете добавить несколько классов к одному элементу, так что есть один .класс button, который охватывает все, затем a .button-submit class, который добавляет вещи.

например:

.button {
    padding: 10px;
    margin: 10px;
    background-color: red;
}

.button-submit {
    background-color: green;
}​

смотрите живой jsFiddle здесь

в вашем случае, следующее должно работать:

.button {
    background: #8BAF3B;
    border-radius: 4px;
    display: block;
    letter-spacing: 0.5px;
    position: relative;
    border-color: #293829;
    border-width: 2px 1px;
    border-style: solid;
    text-align:center;
    color: #FFF;
    width:350px;
    font-size: 20px;
    font-weight: bold;
    padding:10px;
}


.button-submit {
    width:75px;
    font-size: 12px;
    padding: 1px;
}​

смотрите живой jsFiddle здесь


вы можете попробовать это:

.button {
    padding: 10px;
    margin: 10px;
    background-color: red;
}

.button.submit {
    background-color: green;
}
.button.submit:hover {
    background-color: #ffff00;
}

таким образом, вы избегаете повторения слова и сможете использовать классы в таких элементах:

<a href="/" id="btnAsk" class="button">Ask a Question</a> 
<a href="/" id="btnSubmit" class="button submit">Submit</a>

см. пример в JSFiddle (http://goo.gl/6HwroM)


вместо того, чтобы повторять общий ответ "добавить класс кнопок к элементу", я собираюсь показать вам что-то новое в странном и странном мире new age CSS или более известном как SCSS!

это повторное использование кода в таблицах стилей может быть достигнуто с помощью чего-то, называемого "смешиванием". Это позволяет нам повторно использовать определенные стили с помощью атрибута "@include".

позвольте мне привести вам пример.

@mixin button($button-color) {
    background: #fff;
    margin: 10px;
    color: $color;
}

а потом, когда у нас есть кнопка, мы скажи

#unique-button {
    @include button(#333);
    ...(additional styles)
}

подробнее здесь:http://sass-lang.com/tutorial.html.

распространить слово!!!


вы можете сделать это, так как вы можете применять более одного класса к элементу. Создайте свой мастер-класс и другие более мелкие классы, а затем просто примените их по мере необходимости. Например:

<a href="/" id="ask-question-link" class="button submit">Ask a Question</a> <a href="/" class="ask-button-submit" id="ask-button-submit">Submit</a>

Это применит кнопку и отправит классы, которые вы создадите, позволяя вам также применять эти классы отдельно.

измените пример кода следующим образом:

.master_button {
/* PUT ALL THE COMMON PROPERTIES HERE */
}
AND THEN SOMEHOW EXTEND IT LIKE
.button_display {
/* THE DIFFERENT PROPERTIES OF Display BUTTON */
}
.button_ask {
/* THE DIFFERENT PROPERTIES OF Ask BUTTON */
}

и применить как:

<a href="/" id="ask-question-link" class="master_button button_ask">Ask a Question</a> 
<a href="/" class="master_button submit" id="ask-button-submit">Submit</a>

вы можете посмотреть в Sass. С Sass вы можете в основном создавать переменные в файле css, а затем повторно использовать их снова и снова. http://sass-lang.com/ Следующий пример был взят с официального сайта Сасс:

$blue: #3bbfce;
$margin: 16px;

.content-navigation {
  border-color: $blue;
  color:
    darken($blue, 9%);
}

.border {
  padding: $margin / 2;
  margin: $margin / 2;
  border-color: $blue;
}

добавить класс для кнопки и ссылки для общих частей

.button {
background: #8BAF3B;
border-radius: 4px;
display: block;
letter-spacing: 0.5px;
position: relative;
border-color: #293829;
border-width: 2px 1px;
border-style: solid;
text-align:center;
color: #FFF;
}

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

и ваш HTML будет

<a href="/" id="ask-question-link" class="button ask-button-display">Ask a Question</a>
<a href="/" class="button ask-button-submit" id="ask-button-submit">Submit</a>

.ask-button-display,
.ask-button-submit {
  /* COMMON RULES */
}

.ask-button-display {

}

.ask-button-submit {

}