2016-09-14 10 views
5

मैं मेनू सूची आइटम के दाईं ओर एक छद्म :after तत्व 30 पिक्सेल को स्थान देने की कोशिश कर रहा हूं।एक छद्म स्थिति रखें: सूची आइटम के दाईं ओर तत्व के बाद

आइटम के पाठ की लंबाई से कोई फर्क नहीं पड़ता कि मैं तत्व को दाईं ओर 30px होना चाहता हूं।

मैंने निम्न कोड को कम से कम उस कोड को तोड़ दिया है जो मुझे लगता है कि इस मुद्दे के लिए आवश्यक है।

ध्यान दें कि यह एक मोबाइल मेनू है। मेनू और a टैग लिंक ब्राउज़र (फोन) की पूरी चौड़ाई बढ़ाता है।

enter image description here

आप देख सकते हैं, मैं तत्व प्राप्त करने के लिए जाने के लिए छोड़ दिया 150px को स्थित करने के लिए की जरूरत है:

#menu-main-menu-1 li { 
 
    position: relative; 
 
    list-style: none; 
 
} 
 
#menu-main-menu-1 li a { 
 
    padding: 18px 0; 
 
    display: block; 
 
    text-align: center; 
 
} 
 
#menu-main-menu-1 a:after { 
 
    content: "\25CF"; 
 
    position: absolute; 
 
    right: 0; 
 
    left: 150px; 
 
    top: 20px; 
 
}
<ul id="menu-main-menu-1"> 
 
    <li class="menu-item"> 
 
    <a href="#">Menu Item</a> 
 
    </li> 
 
    <li class="menu-item"> 
 
    <a href="#">Long Menu Item Text</a> 
 
    </li> 
 
</ul>

ऊपर कोड निम्नलिखित परिणाम पैदा करता है आइटम के दाईं ओर 30px। यह काम करता है, लेकिन मैं एक मुद्दा देख सकता हूं जहां मेनू आइटम में बहुत अधिक टेक्स्ट है, तो यह 150px से अधिक हो जाएगा और तत्व टेक्स्ट में होगा। उदाहरण के लिए:

enter image description here

मैं तत्व की जरूरत है कोई फर्क नहीं पड़ता लंबाई पाठ के अधिकार के लिए 30px किया जाना है। तो यह लगेगा की तरह:

enter image description here

यहाँ JSFiddle लिंक है: JSFiddle

कृपया ध्यान दें मैं अनावश्यक शैलियों कि इस सवाल की कार्यक्षमता को प्रभावित नहीं करते के कई छीन लिया है कि (रंग, फ़ॉन्ट्स, आदि)

किसी भी मदद की बहुत सराहना की जाएगी!

धन्यवाद

उत्तर

3
#menu-main-menu-1 li { 
    position: relative; 
    list-style: none; 
} 

#menu-main-menu-1 li a { 
    padding: 18px 0; 
    display: inline-block; 
    text-align: center; 

    // Recommended to recenter text 
    width: 100%; 
    margin: 0 auto; 
} 

#menu-main-menu-1 a:after { 
    content: "\25CF"; 
    padding-left: 30px; 
} 

मैं एक ब्लॉक एक इनलाइन-ब्लॉक के बजाय #menu-main-menu-1 li a बदल गया है, जिसका अर्थ है ब्लॉक पाठ लपेट चाहिए, फिर :after तत्व पैड को 30px से सही करने के लिए बदल दिया है।

क्या आप चाहते हैं कि? https://jsfiddle.net/tvfudkgt/1/

+0

हाँ बहुत करीब! आपका कोड मुझे उस उत्तर में ले जाता है जिसे मैं ढूंढ रहा था। एकमात्र मुद्दा था, इसे इनलाइन ब्लॉक में बदलने से इसे पाठ के बजाय बाईं ओर पाठ को धक्का दिया गया। मैं इसे केंद्र में रखने के लिए कुछ सीएसएस करने में सक्षम था और आपके पैडिंग बाएं विचार पूरी तरह से काम किया। धन्यवाद। इसे # मुख्य-मेनू -1 ली में जोड़ें और मैं आपका उत्तर स्वीकार करूंगा! चौड़ाई: 100%; मार्जिन: 0 ऑटो; –

5

#menu-main-menu-1 li { 
 
    list-style: none; 
 
} 
 
.menu-item { 
 
    display: flex;    /* 1 */ 
 
    justify-content: center; /* 2 */ 
 
} 
 
.menu-item a { 
 
    margin: 0 30px;   /* 3 */ 
 
    padding: 18px 0; 
 
} 
 
.menu-item::after { 
 
    content: "\25CF"; 
 
    align-self: center;  /* 4 */ 
 
} 
 
.menu-item::before { 
 
    content: "\25CF";   /* 5 */ 
 
    visibility: hidden; 
 
}
<ul id="menu-main-menu-1"> 
 
    <li class="menu-item"> 
 
    <a href="#">Menu Item</a> 
 
    </li> 
 
    <li class="menu-item"> 
 
    <a href="#">Long Menu Item Text</a> 
 
    </li> 
 
</ul>

नोट्स:

  1. फ्लेक्स कंटेनर की स्थापना (ब्लॉक स्तर; पूरी चौड़ाई लेता है)
  2. Horizontally center child elements
  3. एंकर/मेनू आइटम में 30 पीएक्स क्षैतिज मार्जिन
  4. राइट-साइड छद्म-तत्व लंबवत केंद्रित है और हमेशा मेनू आइटम के दाईं ओर 30px (टेक्स्ट लम्बाई के बावजूद) है।
  5. बराबर शेष राशि के लिए बाईं ओर एक दूसरा छद्म-तत्व जोड़ा जाता है। यह कंटेनर में केंद्रित मेनू आइटम रखता है। यह visibility: hidden के साथ छुपा हुआ है। (more info)
+2

आपके अच्छे लिखित उत्तर के लिए श्रीमान धन्यवाद। ऐसा लगता है कि यह पूरी तरह से काम करता है लेकिन डेव ने आपके सामने थोड़ा सा जवाब दिया और उसका जवाब थोड़ा आसान था और साथ ही साथ काम करता था। मैंने उसे स्वीकार्य उत्तर दिया ताकि मैं आपको स्वीकार्य उत्तर नहीं दे सकता। हालांकि मैंने आपको एक उपरांत दिया था। आपके काम के लिए फिर से धन्यवाद –

संबंधित मुद्दे