(हालांकि एना का जवाब मेरे बाद के महीनों में आया, शायद मेरा "आधार से सोचने के लिए" के रूप में उपयोग करते हुए, यह तथ्य कि वह एकल div
का उपयोग करने के लिए एक विधि के साथ आने में सक्षम था , इसलिए उसका उत्तर भी देखें - लेकिन ध्यान दें कि हेक्स में सामग्री अधिक सीमित है।)
यह वास्तव में आश्चर्यजनक प्रश्न था। यह पूछने के लिए धन्यवाद। बड़ी बात यह है कि:
ऑरिजनल फिडल प्रयुक्त (बाद में फिडेल लिंक में ऊपर संपादित करें संशोधित) - इसमें imgur.com चित्रों का उपयोग किया गया था, जो लोडिंग में बहुत विश्वसनीय नहीं लग रहे थे, इसलिए नई फ़िडल photobucket.com का उपयोग कर रहा है ( मुझे पता है कि क्या लगातार है छवि लोड हो रहा है मुद्दों )। मैंने मूल लिंक को रखा है क्योंकि नीचे दिया गया स्पष्टीकरण कोड उसी के साथ जाता है ( नई फ़िडल में background-size
या इसमें कुछ अंतर हैं position
)।
आपके प्रश्न को पढ़ने के तुरंत बाद यह विचार मेरे पास आया, लेकिन इसे लागू करने में कुछ समय लगा। मैंने मूल रूप से एक एकल div
और सिर्फ छद्म तत्वों के साथ एक "हेक्स" प्राप्त करने की कोशिश की , लेकिन सबसे अच्छा जैसा कि मैं बता सकता था, बस background-image
(जिसे मुझे ज़रूरत थी) को घुमाने का कोई रास्ता नहीं था , इसलिए मुझे अधिकार प्राप्त करने के लिए कुछ अतिरिक्त div
तत्वों को जोड़ना पड़ा / हेक्स के बाईं ओर, ताकि मैं तब background-image
रोटेशन के साधन के रूप में छद्म तत्वों का उपयोग कर सकूं ।
मैंने IE9, FF और क्रोम में परीक्षण किया। सैद्धांतिक रूप से CSS3 का समर्थन करने वाले किसी भी ब्राउज़र को transform
इसमें काम करना चाहिए।
पहला मुख्य अद्यतन (जोड़ा स्पष्टीकरण)
मेरे पास कुछ कोड स्पष्टीकरण पोस्ट करने के लिए अभी कुछ समय है, इसलिए यहाँ जाता है:
सबसे पहले, हेक्सागोन्स को 30/60 डिग्री संबंधों और त्रिकोणमिति द्वारा परिभाषित किया जाता है, इसलिए वे मुख्य कोण होंगे। दूसरा, हम हेक्स ग्रिड में निवास करने के लिए "पंक्ति" से शुरू करते हैं। एचटीएमएल को परिभाषित किया जाता है (अतिरिक्त div
तत्व हेक्स बनाने में मदद करते हैं):
<div class="hexrow">
<div>
<span>First Hex Text</span>
<div></div>
<div></div>
</div>
<div>
<span>Second Hex Text</span>
<div></div>
<div></div>
</div>
<div>
<span>Third Hex Text</span>
<div></div>
<div></div>
</div>
</div>
हम inline-block
षट्भुज के लिए उपयोग करने जा रहे हैं display
, लेकिन हम नहीं चाहते कि वे गलती से अगली पंक्ति में लपेटें और ग्रिड को बर्बाद कर दें, इसलिए white-space: nowrap
उस मुद्दे को हल करता है। margin
इस पंक्ति पर कितनी जगह आप हेक्स के बीच चाहते हैं पर निर्भर करते हैं करने के लिए जा रहा है, और कुछ प्रयोग आप क्या चाहते हैं पाने के लिए जरूरत हो सकती है।
.hexrow {
white-space: nowrap;
margin: 0 25px 3px;
}
तत्काल बच्चों का उपयोग करना .hexrow
जिनमें से सिर्फ div
तत्व हैं, हम हेक्स आकार के लिए आधार बनाते हैं। width
हेक्स के शीर्ष की क्षैतिज ड्राइव जाएगा, height
उस नंबर से प्राप्त होता है के बाद से सभी पक्षों को एक नियमित षट्भुज पर समान लंबाई कर रहे हैं। फिर से, मार्जिन रिक्ति पर निर्भर होने जा रहा है, लेकिन यह वह जगह है जहां ग्रिड देखने के लिए अलग-अलग हेक्सागोन्स के "ओवरलैप" होने वाले हैं। background-image
एक बार यहीं परिभाषित किया गया है,। इस पर छोड़ दिया गया बदलाव हेक्स के बाईं ओर के लिए कम से कम अतिरिक्त चौड़ाई को समायोजित करना है। मान लें कि आप केंद्रित पाठ चाहते हैं, तो text-align
क्षैतिज (निश्चित रूप से) हैंडल करता है , लेकिन यह एक ऊर्ध्वाधर केंद्र के लिए अनुमति देने के लिए line-height
मेल खाता height
है।
.hexrow > div {
width: 100px;
height: 173.2px;
margin: 0 25px;
position: relative;
background-image: url(http://i.imgur.com/w5tV4.jpg);
background-position: -50px 0;
background-repeat: no-repeat;
color: #ffffff;
text-align: center;
line-height: 173.2px;
display: inline-block;
}
प्रत्येक विषम संख्या हेक्स हम "पंक्ति" के संबंध में नीचे शिफ्ट करने जा रहे हैं और प्रत्येक भी ऊपर की ओर। शिफ्ट गणना (चौड़ाई x cos (30) / 2) भी (ऊंचाई / 4) के समान है।
.hexrow > div:nth-child(odd) {
top: 43.3px;
}
.hexrow > div:nth-child(even) {
top: -44.8px;
}
हम div
हेक्स के "पंख" बनाने के लिए 2 बाल तत्वों का उपयोग कर रहे हैं । वे मुख्य हेक्स आयत के आकार के समान होते हैं, और फिर घुमाया जाता है, और मुख्य हेक्स के नीचे "नीचे" धकेल दिया जाता है। Background-image
विरासत में मिला है ताकि छवि एक ही हो (बेशक), क्योंकि "पंख" में छवि मुख्य आयत में "पंक्तिबद्ध" होने जा रही है। छद्म तत्वों का उपयोग छवियों को उत्पन्न करने के लिए किया जाता है, क्योंकि उन्हें क्षैतिज रूप से "फिर से विभाजित" करने की आवश्यकता होती है (क्योंकि हमने div
"पंख" बनाने के लिए उनके माता-पिता को घुमाया था )।
सबसे :before
पहले अपनी पृष्ठभूमि का अनुवाद हेक्स के मुख्य भाग के बराबर नकारात्मक राशि की चौड़ाई और मुख्य xx की मूल पृष्ठभूमि बदलाव के रूप में करेगा। :before
दूसरे का अनुवाद के मूल बिंदु बदल जाएगा और x- अक्ष पर मुख्य चौड़ाई परिवर्तन होगा, और y- अक्ष पर आधा ऊंचाई।
.hexrow > div > div:first-of-type {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: -1;
overflow: hidden;
background-image: inherit;
-ms-transform:rotate(60deg);
-moz-transform:rotate(60deg);
-webkit-transform:rotate(60deg);
-o-transform:rotate(60deg);
transform:rotate(60deg);
}
.hexrow > div > div:first-of-type:before {
content: '';
position: absolute;
width: 200px;
height: 100%;
background-image: inherit;
background-position: top left;
background-repeat: no-repeat;
bottom: 0;
left: 0;
z-index: 1;
-ms-transform:rotate(-60deg) translate(-150px, 0);
-moz-transform:rotate(-60deg) translate(-150px, 0);
-webkit-transform:rotate(-60deg) translate(-150px, 0);
-o-transform:rotate(-60deg) translate(-150px, 0);
transform:rotate(-60deg) translate(-150px, 0);
-ms-transform-origin: 0 0;
-webkit-transform-origin: 0 0;
-moz-transform-origin: 0 0;
-o-transform-origin: 0 0;
transform-origin: 0 0;
}
.hexrow > div > div:last-of-type {
content: '';
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: -2;
overflow: hidden;
background-image: inherit;
-ms-transform:rotate(-60deg);
-moz-transform:rotate(-60deg);
-webkit-transform:rotate(-60deg);
-o-transform:rotate(-60deg);
transform:rotate(-60deg);
}
.hexrow > div > div:last-of-type:before {
content: '';
position: absolute;
width: 200px;
height: 100%;
background-image: inherit;
background-position: top left;
background-repeat: no-repeat;
bottom: 0;
left: 0;
z-index: 1;
-ms-transform:rotate(60deg) translate(100px, 86.6px);
-moz-transform:rotate(60deg) translate(100px, 86.6px);
-webkit-transform:rotate(60deg) translate(100px, 86.6px);
-o-transform:rotate(60deg) translate(100px, 86.6px);
transform:rotate(60deg) translate(100px, 86.6px);
-ms-transform-origin: 100% 0;
-webkit-transform-origin: 100% 0;
-moz-transform-origin: 100% 0;
-o-transform-origin: 100% 0;
transform-origin: 100% 0;
}
इससे span
आपका पाठ बनता है। line-height
पाठ की तर्ज सामान्य बनाने के लिए रीसेट किया जाता है, लेकिन vertical-align: middle
जब से काम करता है line-height
माता पिता पर बड़ा था। यह white-space
रीसेट है इसलिए यह फिर से रैपिंग की अनुमति देता है। पाठ को हेक्स के "पंख" में जाने की अनुमति देने के लिए बाएं / दाएं मार्जिन को नकारात्मक पर सेट किया जा सकता है।
.hexrow > div > span {
display: inline-block;
margin: 0 -30px;
line-height: 1.1;
vertical-align: middle;
white-space: normal;
}
आप छवियों, या span
पाठ सेटिंग्स, या अस्पष्टता को बदलने के लिए उन पंक्तियों में पंक्तियों और कोशिकाओं को लक्षित कर सकते हैं, या एक बड़ी छवि को समायोजित कर सकते हैं (इसे अपनी इच्छित जगह पर स्थानांतरित करने के लिए), आदि। यही दूसरी पंक्ति के लिए निम्न कार्य है।
.hexrow:nth-child(2) > div:nth-child(1) {
background-image: url(http://i.imgur.com/7Un8Y.jpg);
}
.hexrow:nth-child(2) > div:nth-child(1) > span {
margin: 0 -20px;
color: black;
font-size: .8em;
font-weight: bold;
}
.hexrow:nth-child(2) > div:nth-child(2) {
background-image: url(http://i.imgur.com/jeSPg.jpg);
}
.hexrow:nth-child(2) > div:nth-child(3) {
background-image: url(http://i.imgur.com/Jwmxm.jpg);
background-position: -150px -120px;
opacity: .3;
color: black;
}
.hexrow:nth-child(2) > div:nth-child(3) > div:before {
background-position: -100px -120px;
}
.hexrow:nth-child(2) > div:nth-child(4) {
background-image: url(http://i.imgur.com/90EkV.jpg);
background-position: -350px -120px;
}
.hexrow:nth-child(2) > div:nth-child(4) > div:before {
background-position: -300px -120px;
}