2015-10-05 3 views
16

Простенько создать стрелку at the bottom of image.Изображение с нижним треугольником, накладывающим другое изображение

Но это возможно для того чтобы достигнуть что-то вроде этого, где второе изображение не фон, а другой образ, который идет после первого изображения: Image with triangle at the bottom over image

Я создал «перо» на codepen.io

.wrap { 
 
    position: relative; 
 
    overflow: hidden; 
 
    width: 70%; 
 
    height: 200px; 
 
    margin: 0 auto; 
 
} 
 
.wrap img { 
 
    width: 100%; 
 
    height: auto; 
 
    display: block; 
 
} 
 
.arrow { 
 
    position: absolute; 
 
    bottom: 0; 
 
    width: 100%; 
 
} 
 
.arrow:before, 
 
.arrow:after { 
 
    content: ''; 
 
    position: absolute; 
 
    bottom: 100%; 
 
    width: 50%; 
 
    box-sizing: border-box; 
 
} 
 
.arrow:before { 
 
    right: 50%; 
 
    border-bottom: 20px solid #000; 
 
    border-right: 20px solid transparent; 
 
} 
 
.arrow:after { 
 
    left: 50%; 
 
    border-bottom: 20px solid #000; 
 
    border-left: 20px solid transparent; 
 
}
<div class="wrap"> 
 
    <img src="https://farm8.staticflickr.com/7187/6895047173_d4b1a0d798.jpg" /> 
 
    <div class="arrow"></div> 
 
</div> 
 
<div class="wrap"> 
 
    <img src="http://i.imgur.com/EinPKO3.jpg" /> 
 
    <div class="arrow"></div> 
 
</div>

+0

Дубликат [this] (http://stackoverflow.com/questions/23758922/transparent-arrow-triangle?lq=1). Однако, если вы хотите совпадение, вы можете использовать отрицательные поля. –

+0

Попробуйте использовать Stack Snippets вместо таких сайтов, как codepen.io. – cybermonkey

+0

@ImranBughio, пример из ссылки вы отправили asnwers по вопросу с родительским> дочерним отношением, но я спрашиваю об элементах братьев и сестер – Nicolai

ответ

9

В ответе, который вы указали, есть два подхода, которые позволяют вывод, который вы ищете.

Если вы смотрите под 4-м подходом (подсказка с треугольником над изображением.), То указанная техника такая же, как то, что использует facebook для всплывающих подсказок при наведении имени.

Tooltip with triangle over non plain content

Хотя этот подход имеет лучшую поддержку браузера, я бы предпочел использовать подход (SVG также представленный в должности вы связаны) с clipPath элементом, чтобы сделать треугольник в нижней части.

адаптированный к вашему прецеденту, это может выглядеть следующим образом:

*{margin:0;} 
 
svg{ 
 
    display:block; 
 
    position:relative; 
 
    margin-bottom:-3.5%; 
 
    z-index:50; 
 
} 
 
svg:nth-child(2){ 
 
    z-index:49; 
 
} 
 
svg:nth-child(3){ 
 
    z-index:48; 
 
}
<svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 600 400"> 
 
    <defs> 
 
    <clipPath id="clip"> 
 
     <path d="M0 0 H600 V380 H320 L300 400 L280 380 H0z" /> 
 
    </clipPath> 
 
    </defs> 
 
    <image xlink:href="http://lorempixel.com/output/people-q-g-600-400-1.jpg" width="600" height="400" clip-path="url(#clip)"/> 
 
</svg> 
 
<svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 600 400"> 
 
    <image xlink:href="http://lorempixel.com/output/nature-q-c-600-400-1.jpg" width="600" height="400" clip-path="url(#clip)"/> 
 
</svg> 
 
<svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 600 400"> 
 
    <image xlink:href="http://lorempixel.com/output/abstract-q-g-600-400-6.jpg" width="600" height="400" clip-path="url(#clip)"/> 
 
</svg>

Обратите внимание, что для простоты демо использует изображения с тем же соотношением сторон.Каждое изображение находится в своем собственном формате SVG тег для ремонтопригодности (например: добавить или удалить изображение)

Выход:

Image with bottom triangle over another image

Более подробную информацию о MDN:

+1

большую работу чувак работает в FireFox и Internet Explorer, а также –

+0

@ веб-Тики, выглядит хорошо, но у меня есть еще один вопрос: как я могу ставить контент по сравнению с изображениями (идея в том, что изображение будет фоном для контента): у каждого изображения есть собственный контент ... Конечно, с JS я могу получить размер контента, который мне нужно разместить, и размер svg и th en с абсолютным местоположением места размещения над изображениями ... но есть ли лучшее решение? – Nicolai

+0

@Nicolai может быть что-то вроде этого: http://jsfiddle.net/um2wby5a/ –

0

Если вы хотите складывать изображения, у вас есть много разных методов. Вы всегда можете использовать z-index, чтобы поместить их в разные заказы. Вы можете использовать .png-файлы, чтобы добавить контраст к макету.

+0

проблема ** как ** использовать z-index для достижения того, что мне нужно ... и я не могу использовать правильное изображение .png, которое уже имеет стрелу внизу. – Nicolai

+0

Используйте 'z-index' с' nth-child' для таргетинга класса переноса следующим образом: '.wrap: nth-child (1) {z-index: 2; } ' –

+0

@ImranBughio, это не сработает ... – Nicolai

6

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

я создал следующий на моем пути, и здесь это код этого

Обратите внимание : Это не будет работать с Internet Explorer и FireFox

В FireFox поддержки клип путь по единственному значению URL-адрес

для поддержки браузера, пожалуйста, смотрите на следующую ссылку и

Browser Support for clip-path

.boundry{ 
 
    margin-top:100px; 
 
    margin-left:100px; 
 
    width:50%; 
 
    margin-bottom:100px;  
 
} 
 
.arrow_box { 
 
    height:180px; 
 
\t position: relative; 
 
\t background: #88b7d5; \t 
 
    padding:15px;  
 
    text-align:center;  
 
    color:white; 
 
    -webkit-clip-path: polygon(0% 0%, 100% 0%, 100% 80%, 46% 80%, 51% 90%, 56% 80%, 0% 80%); 
 
    clip-path: polygon(0% 0%, 100% 0%, 100% 80%, 46% 80%, 51% 90%, 56% 80%, 0% 80%); 
 
} 
 
.arrow_box:nth-child(1){   
 
    background:url('http://3.bp.blogspot.com/-lz3nDbV440A/VO4QpcN4ZCI/AAAAAAAAN94/PAYUtUysb-4/s1600/happy-holi-images-2015%2B(9).jpg'); 
 
    color:grey; 
 
    z-index: 5; 
 
} 
 
.arrow_box:nth-child(2){ 
 
    margin-top: -42px; 
 
    margin-bottom: -35px;  
 
    background:url('http://blog.jimdo.com/wp-content/uploads/2014/01/tree-247122.jpg'); 
 
}
<div class="boundry" > 
 
    <div class="arrow_box"> 
 
     <h1 class="logo">first image</h1> 
 
    </div> 
 
    <div class="arrow_box"> 
 
     <h1 class="logo">second image</h1> 
 
    </div> 
 
</div>

и здесь рабочий демонстрационный код для этого

Demo Code

+0

@Nicolai, пожалуйста, посмотрите на мой ответ –

+0

хороший ответ +1, но это не работает в IE и Firefox ... – Nicolai

+0

@Nicolai Позвольте мне проверить –