2015-10-26 2 views
0

я в настоящее время имеют структуру, как это:CSS - групповые же классы следующих друг с другом

<div class="a">Something</div> 
<div class="a">Something</div> 
<div class="a">Something</div> 
<div class="b">Something</div> 
<div class="b">Something</div> 
<div class="a">Something</div> 

Как может я группировать одинаковые классы вместе? В этом примере я хочу, чтобы все классы не имели поля между ними, а все элементы класса не имеют разницы между ними, но они должны иметь поля между разными классами.

по следующему пути его можно в определенной степени:

div { 
margin-top: 20px; 
} 
.a+.a, .b+.b { 
margin-top: 0px 
} 

однако вся моя HTML структура работает с маржинальным-клеш - поэтому я ищу для подобного решения, которое будет работать с недостаточной мере снизу вместо margin-top.

ответ

2

Возможно использование sibling selector. Я добавил в фрагмент ниже divs и span, чтобы проиллюстрировать суть. Вы можете установить маржу на пролете, используя класс или идентификатор, но таким образом, вы можете применить его в более общем случае, где бы вы Div с последующим пролете, сделайте запас (или любой другой стиль хочешь применить)

div, span{ 
 
    border: 1px solid blue; 
 
    display:block; 
 
    width: 100px; 
 
    height: 30px; 
 
} 
 
div + span { 
 
    margin:10px; 
 
}
<div>1</div> 
 
<div>2</div> 
 
<div>3</div> 
 
<div>4</div> 
 
<span>1</span> 
 
<div>5</div>

+0

это обратное тому, что я ищу. Для того, чтобы это работало правильно, насколько я понимаю, мне нужно исключить все, как вы это делали с этим «div» - это не то, что я ищу.Мои настройки по умолчанию для css содержат все объекты, удаленные друг от друга, я хочу только добавить фактор «исключить»: «держите их удаленными, если они не являются одинаковыми» – Mia

+0

Итак, в ближайшее время я не пытаюсь сохранить «divs отдельно от изображений» «Вместо этого я пытаюсь группировать подобные типы вместе (если они следуют за другим) – Mia

+0

Я тебя не понимаю. Разве вы не хотите, чтобы divs были привязаны друг к другу, а img/span - к мартинам? Как вы хотите, чтобы они были сгруппированы. Пожалуйста, объясните – Chris

-1

Вы можете сделать это, используя jQuery.

$("img").next("div").css('margin','10x 0px'); 
+0

Я ищу решение только css – Mia

+0

как насчет следующего? IMG + DIV { Маржа: 10px 0px } – kishan

+0

Проверьте мой ответ на ответ Криса пожалуйста :) – Mia

0

Или вы можете просто дать создать margin-bottom класс и применить его к вашим img тегам, которые вы хотите осуществить.

<img src="image.png/> 
<img src="image.png/> 
<img src="image.png/> 
<img src="image.png/> 
<div>Something</div> 
<img class="botMargin" src="image.png/> 

.botMargin { 
    bottom-margin: 20px; 
} 
1

Вот что я в настоящее время использовать - если нет ответа, я буду отмечать это как решение

http://codepen.io/anon/pen/vNRrdo

<div class="a">Class a</div> 
<div class="a">Class a</div> 
<div class="a">Class a</div> 
<div class="a">Class a</div> 
<div class="b">Class b</div> 
<div class="c">Class c</div> 
<div class="c">Class c</div> 
<div class="c">Class c</div> 
<div class="c">Class c</div> 
<div class="a">Class a</div> 
<div class="a">Class a</div> 
<div class="b">Class b</div> 
<div class="b">Class b</div> 
<div class="b">Class b</div> 
<div class="a">Class a</div> 
<div class="c">Class c</div> 
<div class="c">Class c</div> 

CSS

div { 
    width: 200px; 
    text-align: center; 
    line-height: 50px; 
    margin-top: 20px; 
} 

.a { 
    background-color: red; 
} 

.b { 
    background-color: blue; 
} 

.c { 
    background-color: green; 
} 

.a + .a { 
    margin-top: 0; 
} 

.b + .b { 
    margin-top: 0; 
} 

.c + .c { 
    margin-top: 0; 
} 

Проблема с это то, что этот использует margin-top. Вся моя структура страниц использует margin-bottom - поэтому я ищу решение margin-bottom, которое работает аналогично без ручной настройки для каждого типа элемента.

+0

Там нет никакой разницы между 'маржинальной-top' следующего собрата и' маржинальной-bottom' текущего элемента. В конце вы получите тот же результат, надеюсь. И это не ответ, вы должны отредактировать свой вопрос, чтобы люди поняли его лучше. – Chris

+0

Что вы подразумеваете под «next sibling» - ваш ответ не отражает этот @Chris – Mia

+0

, если есть динамический селектор «Следующий брат», который я делаю не видите это в своем ответе? – Mia

0

В CSS3 большинство селекторов работают по потоку DOM.

Это означает, что нет способа дать стиль элементу, на основе которого элементы будут возникать после элемента. (Единственное исключение из этого - псевдо-n-ый-последний-псевдоним).

Чтобы получить результат, который вы хотите, вам нужно быть хитроумным, играть с верхним краем и установить его на минус нижнее значение. (Таким образом, общая сумма составляет 0)

div { 
 
    height: 50px; 
 
    margin: 10px; 
 
} 
 

 
.a { 
 
    border: solid 1px red; 
 
} 
 

 
.b { 
 
    border: solid 1px green; 
 
} 
 

 
.a+.a, .b+.b { 
 
    margin-top: -10px; 
 
}
<div class="a">Something</div> 
 
<div class="a">Something</div> 
 
<div class="a">Something</div> 
 
<div class="b">Something</div> 
 
<div class="b">Something</div> 
 
<div class="a">Something</div>

+0

очень приятно, есть ли у этого какие-либо побочные эффекты? – Mia

Смежные вопросы