2020 সমাধান
আমি এই দিনগুলিতে ব্যবহার করছি আরও একটি আধুনিক সমাধান।
আমি ইমেজগুলির একটি অ্যারে থেকে শুরু করে এইচটিএমএল তৈরি করে শুরু করি। এইচটিএমএল পিএইচপি, জেএস, কিছু এইচটিএমএল প্রিপ্রসেসর ব্যবহার করে তৈরি করা হয়েছে কিনা ... যাই হোক না কেন পিছনের মূল ধারণাটি একই কারণ এটি কম গুরুত্বপূর্ণ।
এখানে পগ কোড রয়েছে যা এটি করবে:
- let imgs = [
- {
- src: 'image_url.jpg',
- alt: 'image alt text'
- }
- ];
- let n_imgs = imgs.length;
- let has_mid = 1;
- let m = n_imgs - has_mid;
- let tan = Math.tan(Math.PI/m);
.container(style=`--m: ${m}; --tan: ${+tan.toFixed(2)}`)
- for(let i = 0; i < n_imgs; i++)
a(href='#' style=i - has_mid >= 0 ? `--i: ${i}` : null)
img(src=imgs[i].src alt=imgs[i].alt)
উত্পন্ন এইচটিএমএলটি নীচের মতো দেখায় (এবং হ্যাঁ, আপনি নিজেও এইচটিএমএল লিখতে পারেন, তবে এটি পরে পরিবর্তনগুলি করতে ব্যথা হতে পারে):
<div class="container" style="--m: 8; --tan: 0.41">
<a href='#'>
<img src="image_mid.jpg" alt="alt text"/>
</a>
<a style="--i: 1">
<img src="first_img_on_circle.jpg" alt="alt text"/>
</a>
</div>
সিএসএসে আমরা চিত্রগুলির জন্য কোনও আকারের বিষয়ে সিদ্ধান্ত নিই, আসুন 8em। --mআইটেম একটি বৃত্ত উপর স্থান হয় এবং যদি তারা একটি বহুভুজ প্রান্ত মাঝখানে করছি এটা --mপ্রান্ত, যার মধ্যে সব চেনাশোনাতে স্পর্শক হয়।
যদি এটি চিত্রিত করতে আপনার যদি কোনও শক্ত সময় হয় তবে আপনি এই ইন্টারেক্টিভ ডেমো দিয়ে খেলতে পারেন যা বিভিন্ন বহুভুজগুলির জন্য সার্কেল এবং সার্কিট তৈরি করে যার স্লাইডারটি টেনে আপনি পছন্দ করেছেন।

এটি আমাদের জানায় যে ধারকটির আকার অবশ্যই বৃত্তের ব্যাসার্ধের দ্বিগুণ এবং চিত্রগুলির দ্বিগুণ আকারের হতে হবে।
আমরা এখনও ব্যাসার্ধটি জানি না, তবে আমরা যদি প্রান্তগুলি (এবং অতএব অর্ধেক বেস কোণের স্পর্শক, পূর্বনির্ধারিত এবং কাস্টম সম্পত্তি হিসাবে সেট --tan) এবং বহুভুজ প্রান্তটি জানি তবে আমরা এটি গণনা করতে পারি । আমরা সম্ভবত বহুভুজ প্রান্তটি চিত্রগুলির কমপক্ষে আকারের হতে চাই, তবে আমরা পক্ষগুলিতে কতটা রেখে দেই তা নির্বিচারে। ধরা যাক যে প্রতিটি পাশেই আমাদের অর্ধেক আকারের আকার রয়েছে, সুতরাং বহুভুজ প্রান্তটি চিত্রের আকারের দ্বিগুণ। এটি আমাদের নিম্নলিখিত সিএসএস দেয়:
.container {
--d: 6.5em;
--rel: 1;
--r: calc(.5*(1 + var(--rel))*var(--d)/var(--tan));
--s: calc(2*var(--r) + var(--d));
position: relative;
width: var(--s); height: var(--s);
background: silver
}
.container a {
position: absolute;
top: 50%; left: 50%;
margin: calc(-.5*var(--d));
width: var(--d); height: var(--d);
--az: calc(var(--i)*1turn/var(--m));
transform:
rotate(var(--az))
translate(var(--r))
rotate(calc(-1*var(--az)))
}
img { max-width: 100% }
ট্রান্সফর্ম চেইন কীভাবে কাজ করে তার ব্যাখ্যার জন্য পুরানো সমাধান দেখুন।
এইভাবে, চিত্রগুলির অ্যারে থেকে কোনও চিত্র যুক্ত করা বা সরিয়ে ফেলা স্বয়ংক্রিয়ভাবে একটি বৃত্তে নতুন সংখ্যক চিত্রগুলি এমনভাবে সাজিয়ে তোলে যাতে তারা সমানভাবে ব্যবধানযুক্ত হয়ে যায় এবং ধারকটির আকারও সামঞ্জস্য করে। আপনি এই ডেমোতে এটি পরীক্ষা করতে পারেন ।
ওল্ড সমাধান (historicalতিহাসিক কারণে সংরক্ষিত)
হ্যাঁ, এটি কেবলমাত্র CSS ব্যবহার করে খুব সম্ভব এবং খুব সহজ। আপনি যে কোণগুলিতে ইমেজগুলির সাথে লিঙ্কগুলি চান তা স্পষ্ট করে রাখতে হবে (যখনই আপনি কোনও একটিকে ঘুরে দেখেন তখন কেবল কোণগুলি দেখানোর জন্য আমি কোডের টুকরোটি শেষ করেছি)।
আপনার প্রথমে একটি র্যাপার দরকার। আমি এর ব্যাসটি সেট করেছিলাম 24em( width: 24em; height: 24em;এটি করে), আপনি যা চান সেটাকে সেট করতে পারেন। আপনি এটি দিন position: relative;।
তারপরে আপনি সেই লিখিত চিত্রগুলির সাথে আপনার লিঙ্কগুলি অনুভূমিকভাবে এবং উলম্বভাবে উভয় স্থানে রেখে দিন। আপনি সেটিংস স্থাপন করে position: absolute;এবং তারপরে top: 50%; left: 50%;এবং margin: -2em;( 2emচিত্রটির সাথে লিঙ্কের অর্ধ প্রস্থটি, যা আমি সেট করে রেখেছি 4em- আবার, আপনি এটি যা চান তাতে পরিবর্তন করতে পারেন তবে মার্জিনটি পরিবর্তন করতে ভুলবেন না যে ক্ষেত্রে)।
এর পরে আপনি কোণ যেটা আপনি ইমেজ সঙ্গে আপনার লিঙ্ক করতে চান সিদ্ধান্ত এবং আপনি একটি ক্লাস যোগ deg{desired_angle}(উদাহরণস্বরূপ deg0বা deg45বা যাই হোক না কেন)। তারপরে এই জাতীয় প্রতিটি শ্রেণীর জন্য আপনি এই জাতীয় শৃঙ্খলাবদ্ধ সিএসএস রূপান্তরগুলি প্রয়োগ করুন:
.deg{desired_angle} {
transform: rotate({desired_angle}) translate(12em) rotate(-{desired_angle});
}
যেখানে আপনি প্রতিস্থাপন {desired_angle}সঙ্গে 0, 45, ইত্যাদি ...
প্রথম ঘোরানো রূপান্তরটি বস্তু এবং তার অক্ষগুলি ঘোরায়, অনুবাদ রূপান্তরটি আবর্তিত এক্স অক্ষের সাথে অবজেক্টটিকে অনুবাদ করে এবং দ্বিতীয় ঘোরানো ট্রান্সফর্মটি বস্তুটিকে অবস্থানে ফিরিয়ে দেয়।
এই পদ্ধতির সুবিধা হ'ল এটি নমনীয়। আপনি বর্তমান কাঠামোটি পরিবর্তন না করেই বিভিন্ন কোণে নতুন চিত্র যুক্ত করতে পারেন।
টুকিটাকি সংকেতলিপি
.circle-container {
position: relative;
width: 24em;
height: 24em;
padding: 2.8em;
border: dashed 1px;
border-radius: 50%;
margin: 1.75em auto 0;
}
.circle-container a {
display: block;
position: absolute;
top: 50%; left: 50%;
width: 4em; height: 4em;
margin: -2em;
}
.circle-container img { display: block; width: 100%; }
.deg0 { transform: translate(12em); }
.deg45 { transform: rotate(45deg) translate(12em) rotate(-45deg); }
.deg135 { transform: rotate(135deg) translate(12em) rotate(-135deg); }
.deg180 { transform: translate(-12em); }
.deg225 { transform: rotate(225deg) translate(12em) rotate(-225deg); }
.deg315 { transform: rotate(315deg) translate(12em) rotate(-315deg); }
<div class='circle-container'>
<a href='#' class='center'><img src='image.jpg'></a>
<a href='#' class='deg0'><img src='image.jpg'></a>
<a href='#' class='deg45'><img src='image.jpg'></a>
<a href='#' class='deg135'><img src='image.jpg'></a>
<a href='#' class='deg180'><img src='image.jpg'></a>
<a href='#' class='deg225'><img src='image.jpg'></a>
<a href='#' class='deg315'><img src='image.jpg'></a>
</div>
এছাড়াও, আপনি imgট্যাগ ব্যবহারের পরিবর্তে লিঙ্কগুলির জন্য পটভূমি চিত্র ব্যবহার করে এইচটিএমএলটিকে আরও সরল করতে পারেন ।
সম্পাদনা : আইই 8 এবং তার বেশি বয়সীদের ফ্যালব্যাকের সাথে উদাহরণ (আইই 8 এবং আই 7 তে পরীক্ষা করা)