Показать сообщение отдельно
  #8 (permalink)  
Старый 31.12.2018, 00:17
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Цитата:
насколько я понял перерыв гору инфы - на сегодня нет кроссбраузерного решения тени вокруг прозрачного объекта
Кроссбраузерное решение – CSS-фильтры, а именно функция drop-shadow. https://caniuse.com/#search=filter

Не претендую на то, что это лучшее решение, но можно менять значение атрибута в зависимости от нажатой кнопки. И в зависимости от значения атрибута показывать или скрывать соответствующие части.

Пример, передающий суть без точного копирования.
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width">
	<style>
		
@font-face {
	font-family: Circe;
	src: url("https://cors-anywhere.herokuapp.com/http://key.alexunyr.beget.tech/wp-content/themes/silverkey/fonts/Circe-Regular.woff");
}
	
.water-delivery {
	display: flex;
	flex-flow: wrap;
	color: white;
	font: 1em Circe;
	background:
		url(http://key.alexunyr.beget.tech/wp-content/themes/silverkey/img/header-bg.jpg)
		center / cover
		#56d7fc
	;
	text-shadow: 0 .1em .1em rgba(0, 0, 0, 0.3);
}
		
.water-delivery h1 {
	font-size: 2em;
}
		
.water-delivery p {
	font-size: 1em;
}
		
.water-delivery > section {
	text-align: center;
	flex: 1;
}
		
.water-delivery > section button[data-key] {
	width: 20em;
	height: 0;
	padding: 10em 0 0 0;
	color: transparent;
	border: 0;
	transition: 300ms;
	background:
		no-repeat
		center / contain
}
		
.water-delivery > section button[data-key]:hover {
	filter: drop-shadow(0 0 1em #009af7);
}
		
.water-delivery figure {
	position: relative
}
		
.water-delivery > section:last-child img {
	max-width: 100%;
	opacity: 0;
	transition: 500ms;
	will-change: opacity;
}

.water-delivery .slick-arrow {
	align-self: center;
	width: 2em;
	height: 2em;
	display: inline-flex;
	justify-content: center;
	align-items: center;
	font-size: 2em;
	border-radius: 100%;
	border: none;
	background: #009af7;
	color: white;
	margin: .25em;
}

.water-delivery .slick-arrow.right {
	order: 1;
	align-self: center;
}
		
.water-delivery > section:last-child img:not(:last-of-type) {
	position: absolute;
}

	</style>
</head>
<body>
	<section class="water-delivery">
		<button class="slick-arrow left">&larr;</button>
		<button class="slick-arrow right">&rarr;</button>
		<section>
			<h1>Доставка воды</h1>
			<p><strong>Природная вода</strong> из скважины<br>прямо с месторождения</p>
			<div>
				<button data-key="silver">Серебрянный ключ</button>
				<button data-key="shufansky">Шуфанский ключ</button>
			</div>
		</section>
		<section>
			<figure>
				<img class="img-fluid" src="http://key.alexunyr.beget.tech/wp-content/themes/silverkey/img/bottle-silver-key.png" alt="Серебряный ключ">
				<img class="img-fluid" src="http://key.alexunyr.beget.tech/wp-content/themes/silverkey/img/bottle-shufansky-key.png" alt="Шуфанский ключ">
			</figure>
		</section>
	</section>
	<script>
		
		const keys = ["silver", "shufansky"];
		
		document.head.appendChild((style => {
			style.textContent = keys.map(key => `
				.water-delivery > section button[data-key="${key}"] {
					background-image:
						url(http://key.alexunyr.beget.tech/wp-content/themes/silverkey/img/${key}-key-slider.png)
				}

				.water-delivery[data-key="${key}"] > section:last-child img[src*="${key}-key"] {
					opacity: 1;
				}

				.water-delivery[data-key="${key}"] > section button[data-key="${key}"] {
					filter: drop-shadow(0 0 1em #009af7) drop-shadow(0 0 1em white);
				}
			`).join("\n\n");
			return style;
		})(document.createElement("style")));
		
		document.addEventListener("click", ({ target }) => {
			if(!target.matches(
				`${keys.map(k => `[data-key="${k}"]`).join(", ")}, .slick-arrow`
			)) return;
			
			const root = target.closest(".water-delivery");
			const key = target.dataset.key;
			const index = keys.indexOf(key);
			root.dataset.key = key;
			
			for(const arrow of root.querySelectorAll(".slick-arrow")) {
				arrow.dataset.key = keys[
					(keys.length + (
						arrow.classList.contains("left") ? -1 : 1
					) + index) % keys.length
				];
			}
		});
		
		for(const e of document.querySelectorAll(`[data-key="${keys[0]}"]`))
			e.click();
		
	</script>
</body>
</html>
Ответить с цитированием