2013-09-16 11 views
6

goalCSS owalny kształt wycięty z div

Powyższy obraz jest to, co staram się tworzyć, ale mam pewne trudności z owalnym kształcie. Wyjaśnienie:

  • Pasek menu jest div z lekkim gradientu liniowego (ciemnoszarym przejrzysty lżejsze szary)
  • Firma logo obraz ma przejrzystą BG i będą siedzieć „ontop” z paska menu
  • owalny wyłącznik będzie musiał dopasować owal logo i posiada przejrzysty lukę między tym pojawi się kolor tła (zmienia się na każdej stronie, pomarańczowy jest tylko przykładem)

próbowałem i zawiodło wiele razy radialnym gradientem - udało mi się wykreślić koło, ale co Nie pracuj nad tym, jak zrobić owal, a następnie nie można uzyskać liniowego gradientu do pracy. Zobacz kod:

.circle { 
    height: 10em; 
    background: radial-gradient(circle 50px at 50% 100%, transparent 50px, rgba(84, 82, 94, 0.8) 50px); 
    background: -webkit-radial-gradient(50% 100%, circle, transparent 50px, rgba(84, 82, 94, 0.8) 50px); 
} 

Jeżeli kształt wycięcia i gradient jest posortowana, logo zostanie umieszczone na wierzchu.

Wszelkie sugestie lub rozwiązania jsfiddle będą mile widziane, dziękuję!

EDIT: jsfiddle here

EDIT 2: rozwiązali ten problem poprzez zmianę konstrukcji nieznacznie, dzięki tym, którzy odpowiedzieli. Napisałem jquery, aby rozwiązać ten problem - kiedy kolorowy obszar przewinie się poza pole widzenia, owalna ramka i obramowanie nagłówka podniosą kolor górnej sekcji zamiast przezroczystości.

enter image description here

+0

http://stackoverflow.com/a/14747815/1654265 –

+0

mam schowane Bliskie głos. I +1, właściwie to, co próbowaliście, było źródłem inspiracji :) –

+0

Dobrze słyszeć - i dziękuję –

Odpowiedz

4

Można zacząć od tego Running Demo

Uwaga: I'v e dodano małą animację, aby zmienić kolor tła, aby wyczyścić przezroczystą przestrzeń między wyspą a elementem div z wycięciem.

HTML

<div class="cutout"> 
    <div class="island"> 
     <div id="circleText">Circle Text </div> 
    </div> 
</div> 

CSS

.cutout { 
    height: 10em; 
    background: radial-gradient(ellipse 200px 150px at 50% 100%, 
           transparent 100px, #555 50px); 
    position: relative; 
} 
.island { 
    position: absolute; 
    left: calc(50% - 150px); 
    bottom: -50%; 
    width: 300px; 
    background: radial-gradient(ellipse 200px 150px at 50% 50%, 
           silver 90px, rgba(0, 0, 0, 0) 50px); 
    height: 10em; 
} 
.island > div { 
    position: absolute; 
    left: 80px; 
    right: 80px; 
    top: 30px; 
    bottom: 30px; 

    background: rgba(fff, 0, 0, 0.2); 
    padding: 5px;  
    text-align: center;  
} 

#circleText { 
    padding-top: 30px; 
    font-size: 1.5em; 
} 
1

Spróbuj tego: http://css-tricks.com/the-shapes-of-css/

pozycję absolutnie na szczycie innych częściach menu

+0

Tak, już wcześniej tę stronę uważałem za użyteczną, ale kształt musi być wycięty - i przezroczysty. Dzięki jednak –

+0

oh, przepraszam. źle zrozumiałem pytanie: – Pownyan

+0

Co się stanie, jeśli utworzysz element div o tym samym kolorze co tło, umieścisz go tam, gdzie chcesz wycinankę, a następnie umieścisz na nim kolejny element div z logo? – Pownyan

1

Można zrobić coś takiego:

.container{ 
    height: 10em; 
    background: #76757e; 
} 

.ovalCutout{ 
    background:white; 
    height:50px; 
    width:100px; 
    border-radius:50%; 
    margin:0px auto; 
    position:relative; 
    top:120px; 
} 

http://jsfiddle.net/UwXKu/

+0

Dobry pomysł, ale ponieważ kolor tła zmieni się wraz z przewinięciem strony, musi to być wycięcie z przezroczystością. Dzięki jednak –

1

You c zrób to tworząc kompozycję 3 tła, środkowy jeden radialny i boczny liniowy.

Trudno jednak dokładnie dopasować 2 rodzaje gradientów; będzie to wykonalne tylko, jeśli gradient jest bardzo gładki.

.back { 
    height: 100px; 
    width: 1000px; 
    padding: 0px; 
    background-image: radial-gradient(200px 100px ellipse at 50% 100%, transparent 70px, 
       rgba(100, 100, 100, 0.8) 73px, 
       rgba(80, 80, 80, 1) 198px), 
    linear-gradient(180deg, rgb(80, 80, 80), rgba(100, 100, 100, 0.8)), 
    linear-gradient(180deg, rgb(80, 80, 80), rgba(100, 100, 100, 0.8)); 
    background-size: 200px 100px, 40% 100%, 40% 100%; 
    background-repeat: no-repeat; 
    background-position-x: 50%, 0%, 100%; 
    background-position-y: 100%; 
} 

demo

+0

Twój kod pęka w firefoxie, owalny wycinek wypełniony jest gradientem; dzięki za odpowiedź. –

1

Spróbuj tego:

background: radial-gradient(ellipse at 50% 100%, transparent 50px, rgba(84, 82, 94, 0.8) 50px); 

jsfiddle here