#css #inheritance #position #generator
#css #наследование #позиция #генератор
Вопрос:
Эй, я предполагаю, что это, вероятно, довольно тривиально, но, тем не менее, мне трудно найти ответ или разобраться в нем.
Я пытаюсь создать сетку из цветных квадратов с произвольным интервалом между ними. Это само по себе легко сделать, особенно потому, что мне нужно всего девять квадратов. Но когда я смотрю на свой завершенный код, я не могу отделаться от ощущения, что есть гораздо более простой и эффективный способ добиться этого.
На данный момент у меня в моем css объявлено девять разных идентификаторов, по одному для каждого квадрата.
div.container{
position:relative;
left:50px;
top:50px;
background-color:rgb(45,45,45);
height:300px;
width:300px;
}
#square{
position:absolute;
background-color:rgb(52,82,222);
left:20px;
top:20px;
height:80px
width:80px
#square2{
position:absolute;
background-color:rgb(58,82,22);
left:110px;
top:20px;
height:80px;
width:80px;
etc etc etc
Что я хотел бы сделать, так это найти более эффективный способ сделать это.
Спасибо за помощь!
Ответ №1:
Вы можете использовать класс для квадратов, которые совместно используют свойство:
.square {
position: absolute;
width: 80px;
height: 80px;
}
Есть ли конкретная причина, по которой вы их абсолютно позиционируете? Похоже, эта работа лучше подходит для floats.
div.container {
width: 240px;
}
.square {
float: left;
width: 80px;
height: 80px;
}
Комментарии:
1. Я думал о том же, ты меня опередил.
2. Никаких особых причин, ха-ха. Я полагаю, это просто свидетельство моих плохих навыков работы с CSS: P Однако, что меня смущает в вашем ответе, так это то, как мне объявить последующие квадраты, чтобы они наследовали эти константы. Я думал об этом как ооп, но, похоже, я не могу подойти к этому таким образом. Спасибо, что обнажили меня!
Ответ №2:
Предполагая, что внутренними квадратами являются div
s, внутри вашего контейнера нет других div
s, и каждый внутренний div
должен быть одинаковым width
и height
, вот что я бы сделал:
.container {
position: relative;
left: 50px;
top: 50px;
background: rgb(45,45,45);
height: 300px;
width: 300px;
}
.container > div {
position: absolute;
background-color: rgb(52,82,222);
height: 80px;
width: 80px;
}
#square1 {
left: 20px;
top: 20px;
}
#square2 {
left: 110px;
top: 20px;
}
..
Если вам нужны отдельные top
и left
свойства для каждого div
, то у вас нет выбора, кроме как использовать id
s.
Вы можете избежать необходимости добавлять a class
благодаря использованию .container > div
, которое выбирает все div
элементы, являющиеся прямыми дочерними элементами .container
.
HTML будет выглядеть следующим образом:
<div class="container">
<div id="square1"></div>
<div id="square2"></div>
..
</div>
Комментарии:
1. Что, если бы я включил divs в квадраты?
.container > div
Повлияет ли это и на них? Или они не являются прямыми дочерними элементами?2.
.container > div
на них это не повлияло бы.>
является прямым дочерним селектором. Я очень старался объяснить это здесь: http://jsfiddle.net/Mgk23
Ответ №3:
Почему бы не присвоить всем квадратам один и тот же класс и применить что-то вроде
.square
{
display: inline-block;
width: 80px;
height: 80px;
zoom: 1;
*display: inline /* for IE */
}
Это должно заставить все блоки красиво обернуться без необходимости добавлять стили для каждого отдельного.