Jump to content
  • 0

Квадратный див с относительными размерами


Smirnov M.
 Share

Question

Здравствуйте, передо мной стоит задача средствами CSS3 нарисовать круг, который бы изменялся в размерах в зависимости от изменения размера окна.

Понятно, что в такой конструкции


<div id="wr">
<div id="circle1"> </div>
</div>

у внешнего DIVа я ставлю width и height относительные, а у внутреннего


width:100%;
height:100%;
background-color: red;
border-radius: 50%;

Как же мне сделать так, чтобы высота внешнего и внутреннего дивов были одинаковые, то есть, чтобы круг не превращался в овал?

Использовать канвас, изображения, джаваскрипт нельзя, только html+css.

Link to comment
Share on other sites

21 answers to this question

Recommended Posts

  • 0

Ах точно, Оперу забыл, нехорошая она капризная северная красавица :). Хотя для однородного фона и ее можно "уломать", еще одним слоем без заливки и с толстым скругленным бордером фонового цвета. Для неоднородного фона — видимо, только SVG.

Link to comment
Share on other sites

  • 0
Для неоднородного фона — видимо, только SVG.

А, ну раз уж заговорили :Dhttp://forum.htmlbook.ru/index.php?showtopic=34527

Хотя для однородного фона и ее можно "уломать"

У меня так и не вышло… Не сложно пример показать?

Link to comment
Share on other sites

  • 0

Пример для Оперы с "покрышкой" вот. Насчет SVG я грешным делом имел в виду вставку его прямо в разметку (одна из приятных фич HTML5, работающая во всём новом, включая даже IE9). Для кроссбраузерности при цейтноте, имхо, лучше всего взять библиотеку типа Rapha?l, там вопросы совместимости (включая конвертацию в VML для IE8-), по идее, решены. Сам, честно признаюсь, с SVG пока серьезных дел не имел, поэтому личным опытом, увы, поделиться не могу...

  • Like 1
Link to comment
Share on other sites

  • 0
Пример для Оперы с "покрышкой" вот.

Спасибо за пример, у меня всё путаница с позиционированием была. Хорош пример, красивый) Засуну в закладки, авось мысль пригодится когда-нибудь)

А про svg. Rapha?l уже да, посоветовали, но по-моему это не то, что мне нужно. Да и ладно, сейчас немного по-другому вопрос ставлю. Думаю приду к чему-нибудь. Так-то штука эта очень важная, ох как важная…

Link to comment
Share on other sites

  • 0

Резиновый круг можно сделать ещё проще.

Как я понял, резиновость круга создаётся за счёт пайдингов, заданных одним значением в процентах (ширина всех пайдингов в этом случае одинакова и рассчитывается относительно ширины родительского контейнера), и за счёт border-radius, также указанных в процентах (а значения для скругления углов уже рассчитываются относительно соответствующей ширины или высоты самого дива-"круга").

Можно и овал, кстати, сделать

Думаю, что position:relative и margin там ни к чему.

Link to comment
Share on other sites

  • 0

Резиновый круг можно сделать ещё проще.

Сейчас я посмотрел свой пример в браузере Опера 10.62 и увидел странную картину:

cba5cd2d36bd.jpg

У дива, который во всех остальных браузерах выглядит как круглый, в Опере выглядит совсем иначе. Его углы скруглились каким-то странным образом.

SelenIT, а зачем absolute и :before ?

Да и на 100%… почему не так? — http://jsfiddle.net/NbYUW/31/ — проще же всё.

В примере от alexandr_v-vich аналогичная ситуация. Если задавать border-radius не в процентах, а в пикселях, то скругление происходит ожидаемо и корректно, но естественно, при изменении размеров шара это скругление работает совсем не так, чтобы шар оставался шаром. Это баг Оперы? Есть этому объяснение? У кого стоят более поздние версии Оперы, не могли бы вы проаерить, всё ли у вас в порядке с данными примерами. Если не в порядке, то решение не кроссбраузерно, что плохо <_<

Link to comment
Share on other sites

  • 0

clavin,

В примере от alexandr_v-vich аналогичная ситуация

Аналогичная или такая же?

Так-то всегда можно задать радиус в 100500px :), ну это к вопросу о кроссбраузерности, а так, если не затруднит дайте скрин с моего примера (если он хоть немного отличается).

P.S. В 11.62 нормально.

Link to comment
Share on other sites

  • 0

clavin,

В примере от alexandr_v-vich аналогичная ситуация

Аналогичная или такая же?

Так-то всегда можно задать радиус в 100500px :), ну это к вопросу о кроссбраузерности, а так, если не затруднит дайте скрин с моего примера (если он хоть немного отличается).

В вашем примере ситуация полностью аналогичная. Круга нет, есть такой же полускруглённый квадрат, как и на скриншоте к моему примеру.

Link to comment
Share on other sites

  • 0

clavin, мне как-то лень это разбирать. Но можете посмотреть, там бордер ему поставить, большой бордер поставить, поставить 1000% радиусу ну или чего ещё.

Стояла бы ещё старая Опера, может и было б интересно.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy