Помощ за създаване на HTML страница с извита заглавна секция

Чудех се кой е най-добрият начин (използвайки html, css и графики) за създаване на уеб страница, чиято горна заглавна секция изглежда скосена, за разлика от права? Моля, вижте изображението по-долу като пример:

алтернативен текст

Не съм сигурен как да използвам изображения по такъв начин, че да се разширяват/свиват в съответствие с различни размери/резолюции на браузъра...

Може ли някой да ми предложи помощ? Или може би да ме насочите към ресурс?

Благодаря!


person littleK    schedule 24.01.2011    source източник
comment
Вашата ширина фиксирана ли е? Или е течен с може би min-width и max-width?   -  person thirtydot    schedule 24.01.2011
comment
Все още не съм създал нищо, но се надявах да го направя с течна ширина, ако е възможно   -  person littleK    schedule 24.01.2011
comment
Мисля, че можете с border-radious и отрицателни стойности   -  person JCOC611    schedule 24.01.2011


Отговори (5)


Можете да използвате border-radius.

Пример

Вижте моя пример за jsFiddle.

person alex    schedule 24.01.2011
comment
Не знам доколко това е кръстосано съвместимо, само CSS3 мисля. - person JCOC611; 24.01.2011
comment
@JCOC611 Да, това е свойство на CSS3, което ще работи днес в Safari, Chrome, Firefox и IE9. За щастие, той се разгражда елегантно (обаче в зависимост от вашите изисквания). - person alex; 24.01.2011
comment
@ahonorstudent Не, няма да стане. css3pie може да обработва само радиус на границата за целия блок, той не приема радиус на границата само за определени ъгли. - person Russell Dias; 24.01.2011

Моята е по-чиста версия на тази на @Alex:

Демо на живо

.head {
    -webkit-border-top-left-radius: 40% 80px;
    -webkit-border-top-right-radius: 40% 80px;
    -moz-border-radius-topleft: 40% 80px;
    -moz-border-radius-topright: 40% 80px;
    border-top-left-radius: 40% 80px;
    border-top-right-radius: 40% 80px;

    background: blue;
    height: 280px
}
<div class="head"></div>

Очевидно няма да работи в IE.

person thirtydot    schedule 24.01.2011

Можете да използвате CSS3 или специфични за webkit свойства, но това не се поддържа добре, що се отнася до съвместимостта между различни браузъри. Ако искате да поддържате възможно най-много браузъри, най-добре е да използвате фоново изображение, за да постигнете този ефект.

person Tyler Treat    schedule 24.01.2011
comment
Прав си, наистина искам моето решение да бъде възможно най-многобраузърно. Може просто да използвам фоново изображение... - person littleK; 24.01.2011
comment
@behrk2: Ако искате решение, което работи с по-стари браузъри и е плавно, тогава най-добрият ви залог би бил да използвате две фонови изображения (съответно лявата и дясната закръглена част). Ако искате повече подробности как да направите това, оставете коментар. - person thirtydot; 25.01.2011

Ето версия за различни браузъри, която направих с помощта на jquery. По принцип скриптът създава много участъци с бял фон и намаляваща ширина.

Можете да си поиграете с променливите STEPS и FACTOR, които ще променят резултата. Стъпковата функция задава облекчаването на кривата. Може да го замените по-късно с по-добри функции от моите, това е само пример.

var STEPS = 53;
var FACTOR = 5;

var $el = $('div.header');
var width = $el.outerWidth();
var $span = $('<span></span>');
for(i=0;i<STEPS;i++){
    tmpWidth = stepWidth(i, width);
    $span.clone().css({
        'bottom': i + 'px',
        'width': tmpWidth,
        'left': (width - tmpWidth)/2
    }).appendTo($el);

}
function stepWidth(i, width){
    return -(1 / FACTOR * Math.pow(i, 2)) + width;
}

алтернативен текст

Можете да намерите целия код (html + css на Fiddle)

person FRAGA    schedule 24.01.2011
comment
освен това можете да обвържете функция към вашето събитие за преоразмеряване на прозореца, за да преначертаете това момчета - person FRAGA; 24.01.2011

Ето още един начин за постигане на това.

  1. Начертайте наслагване с псевдо елемент с width и height по-големи от самия елемент.
  2. Приложете border-radius, за да създадете кръгъл ефект и background-color.
  3. Добавете overflow: hidden към родител, за да скриете излишната част.

Изходно изображение:

Изходно изображение

body {
  background: linear-gradient(lightblue, blue);
  min-height: 100vh;
  margin: 0;
}

.box {
  position: relative;
  margin: 5vh auto;
  overflow: hidden;
  height: 90vh;
  width: 500px;
}

.box:before {
  border-radius: 100% 100% 0 0;
  position: absolute;
  background: white;
  bottom: -200px;
  right: -200px;
  left: -200px;
  content: '';
  top: 0;
}
<div class="box">
  
</div>

person Mohammad Usman    schedule 27.12.2016