이미지 배경에 따라 적응형 카드 색상을 만드는 방법
15333 단어 htmljavascriptcsswebdev
내 휴대폰의 음악 플레이어 알림에서 영감을 받았습니다.
그리고 실험 결과:
멋져보이죠? 이제 만들기 시작합니다🚀
준비
먼저 html, css 및 js 파일을 만들어야 합니다.
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>Adaptive Card Color</title>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="style.css">
</head>
<body>
<script src="script.js"></script>
</body>
</html>
스타일.css
*,
*::before,
*::after {
padding: 0; margin: 0;
box-sizing: border-box;
}
html {
font-family: sans-serif;
font-size: 16px;
line-height: 1.5;
}
body {
width: 100vw;
height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
script.js
console.log("hello world");
카드 구성 요소 만들기
이와 같이 카드의 html 구조를 만듭니다.
<div class="card">
<img class="card-image" src="">
<div class="card-text">
<span>Lorem Ipsum</span>
<span>Is simply dummy text of the printing and typesetting industry.</span>
</div>
</div>
스타일을 잊지 마세요
.card {
position: relative;
overflow: hidden;
width: 90%;
max-width: 400px;
margin-bottom: 30px;
padding: 30px;
}
.card-image {
position: absolute;
top: 0; right: 0;
width: auto;
height: 100%;
object-fit: cover;
object-position: center;
-webkit-mask-image: linear-gradient(90deg, transparent, #000);
mask-image: linear-gradient(90deg, transparent, #000);
}
.card-text {
position: relative;
z-index: 2;
max-width: 75%;
display: flex;
flex-direction: column;
}
.card-text span:first-child {
font-weight: 500;
font-size: 1.2rem;
margin-bottom: 5px;
}
.card-text span:last-child {
opacity: 0.7;
}
For image source you can get it from unsplash or use a local file.
이미지에서 색상 추출
예, 이미지에서 색상을 추출해야 하며 이는 상당히 복잡한 작업입니다. 운 좋게도 우리에게 도움이 될 멋진 라이브러리를 찾았습니다https://github.com/lokesh/color-thief.
프로젝트에 라이브러리 추가
<script src="https://unpkg.com/[email protected]/dist/color-thief.umd.js"></script>
자바스크립트 시간
// get all card elements.
const cards = document.querySelectorAll(".card");
// create colorthief instance
const colorThief = new ColorThief();
cards.forEach(async (card) => {
const image = card.children[0];
const text = card.children[1];
// get palette color from image
const palette = await extractColor(image);
const primary = palette[0].join(",");
const secondary = palette[1].join(",");
// change color
card.style.background = `rgb(${primary})`;
text.style.color = `rgb(${secondary})`;
});
// async function wrapper
function extractColor(image) {
return new Promise((resolve) => {
const getPalette = () => {
return colorThief.getPalette(image, 4);
};
// as said in the colorthief documentation,
// we have to wait until the image is fully loaded.
if (image.complete) {
return resolve(getPalette());
}
image.onload = () => {
resolve(getPalette());
};
});
}
If you get an error and you use image from internet, you can add
crossorigin="anonymous"
attribute on theimg
tag.
다음 작업에서는 텍스트의 색상을 올바르게 선택할 수 있도록 기본 색상이 어둡거나 밝은지 확인합니다. 행복한 실험 :D
읽어주셔서 대단히 감사합니다. 주저하지 마시고 의견, 비판 또는 제안을 남겨주세요. 정말 감사하겠습니다 ☺️
Hasmik Ghazaryan Olson에 Unsplash의 이미지 표지
Reference
이 문제에 관하여(이미지 배경에 따라 적응형 카드 색상을 만드는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mcanam/how-to-make-adaptive-card-color-depending-on-image-background-555b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)