Jump to content
  • 0

Скругленные углы заданные в процентах у прямогульной кнопки


Cypher76
 Share

Question

Доброго времени суток, уважаемые форумчане.

Имеется обычная прямоугольная кнопка, допустим div. Кнопка может менять ширину, но не высоту. Требуется скруглить ей углы, но задать значения в процентах. Пишу следующий код:

div {
...
width: 50%;
height 80px;
border-radius: 5%;
...
}

Радиус скругления по горизонтали получаю 5% от нефиксированной ширины кнопки, а по вертикали 5% от фиксированной высоты. Скругление получается овальное, а надо круглое, зависящее только от ширины.

В описании свойства border-radius в справочнике по CSS сказанно:

В случае применения процентов, отсчет ведется относительно ширины блока.

Как раз то, что мне нужно! Но, судя по всему, это не так. Получается, что:

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

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

Возможно ли решить задачу средствами CSS?

Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 0

Cypher76, как я понял, в определённый момент расширения экрана у вас должен получиться круг. И расширяя далее сколь угодно, у вас так и будет оставаться круг, так?

Вопрос к вам — когда это должно наступить?

Возможно ли решить задачу средствами CSS?

Если как я написал, то скорее всего нет.

Link to comment
Share on other sites

  • 0

А, ну не) У самого с воображением бывает туго))

Вы, если хотите одинаковое скругление, то оно должно браться от меньшего, в вашем случае чаще от высоты. И это:

надо круглое, зависящее только от ширины

впринципе работать не может. Или оно круглое/ровное, зависящее от меньшей стороны или от большей, но неровное…

Link to comment
Share on other sites

  • 0

Если мы задаем

border-radius: n%;

то круглые углы мы получаем только тогда, когда ширина равна высоте. Тогда процент дает одно и то же значение. Если кнопка тянется (увеличивается ширина), то горизонтальный радиус увеличивается. Если сплющивается (уменьшается ширина), то горизонтальный радиус уменьшается. Вертикальный же всегда фиксированный.

Люботным и кому не лень, попробуйте код.

<style>
div {
margin: 200px auto;
text-align: center;
background: black;
color: white;

/*work with*/
width: 50%;
height: 200px;
border-radius: 20%;
}
</style>

<div>Hello</div>

Хороший вариант, это задать значения через слэш, например:

border-radius: 10% / 20%;

Но это подходит только для случая, когда ширина изменяется пропорционально высоте (в примере 2 к 1). У меня высота не изменяется.

Александр, я думаю, что в конечном итоге врядли получится указать border-radius`у, от чего считать проценты. И, если задуматься, дефолтовый способ высчитывать в процентах значения от высоты и ширины, вполне естественный. Мне он кажется просто непривычным, так как обычно нужно использовать px или em, а они ведут себя по другому.

Я попробую решить задачу использованием media queries. На различных интервалах разрешения буду задавать разный радиус скругления в пикселя. Или, если надо будет увеличивать шрифт на тех же интервалах, то в em`ах, чтобы прописать один раз.

Edited by Cypher76
Link to comment
Share on other sites

  • 0

Cypher76, ну, если рассматривать, что ширина у вас всегда меньше высоты, то у вас максимальный радиус будет равен высоте блока. Ну, минимальный какой хотите.

Допустим, если поставим минимальный нулю, при „квадрате“, и увеличивать радиус, при каждом увеличении ширины, то можно так — http://jsfiddle.net/yPAjD/5/.

А с CSS тут точно нет.

И лучше, по-моему js, нежели media queries. Тем более его тут совсем немного.

Edited by alexandr_v-vich
Link to comment
Share on other sites

  • 0

Softlink, так у тебя фиксированный радиус, он не меняется с увеличением ширины блока… надо чтобы он тоже увеличивался. Ну я так понял)

не, по-моему, это я не так понял) И конструкция моя бессмысленна, запарился))

Edited by Softlink
Link to comment
Share on other sites

  • 0

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

  • Like 1
Link to comment
Share on other sites

  • 0

Да уж…)

SelenIT, по твоим решениям хоть учебники пиши)))

Кстати, для последнего — исправьте для псевдоэлементов

padding: 50%;

на

padding: 50% 0;
width: 100%;

Иначе вылетает иногда по ширине сам блок, т.е. кусок его порой видным становится справа…

  • Like 2
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