2013-03-12 7 views
5

मेरे पास दो तत्वों के साथ एक शीर्षलेख है। पहला एक छवि है जो एक कंपनी लोगो है और 25% चौड़ाई पर सेट है। दूसरा एक एनएवी बार है जिसमें इसके तत्व इनलाइन सेट करते हैं, इसलिए यह क्षैतिज है। मैं नेविगेशन बार को लंबवत केंद्र सेट करना चाहता हूं लेकिन मेरे जीवन के लिए इसे समझ नहीं सकता। मैंने एक तत्व को जो कुछ भी बताया है उसे सेट कर दिया है जो लंबवत-संरेखण का उपयोग कर सकता है और इसे लागू करने के लिए सब कुछ इनलाइन या टेबल सेल में डाल सकता है। कुछ भी काम नहीं करता है।एक नौसेना बार को लंबवत

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

मैं किसी ऑब्जेक्ट को लंबवत रूप से केंद्रित करने पर मैंने कोशिश की है (जितना अधिक मैं स्वीकार करना चाहता हूं) की सराहना करता हूं।

एचटीएमएल में कटौती:

<div id="container"> 
<header id="header" role="banner"> 
    <img src="images" /> 
    <nav id="nav" role="navigation"> 
    <ul> 
     <li><a href="#" title="About Us">About Us</a></li><li><a href="#" title="Biographies">Biographies</a></li><li><a href="#" title="Services">Services</a></li><li><a href="#" title="Careers">Careers</a></li><li><a href="#" title="Contact">Contact</a></li> 
    </ul> 
    </nav> 
</header> 

सीएसएस कटौती:

header img { 
    height: auto; 
    width: 25%; 
    float: left; 
    } 

header nav { 
    width: 75%; 
    font-size: 1em; 
    } 

header nav li { 
    display: inline-block; 

    width: 19%; 
    } 

header nav li a { 
    background: #2CB2E6; 
    line-height: 

उसके बारे में यहां सरल jsFiddle: http://jsfiddle.net/LbTCT/

उत्तर

7

अपने मूल बेला की Here's a fork

header img, header nav { 
    display: inline-block; 
    vertical-align: middle; 
} 

के बजाय कोशिश कर float को बातें: आप अपने लोगो पर inline-block और nav तत्व में ही स्थापित करने की जरूरत है।

+0

महोदय, मैं आपकी महानता को झुकाता हूं। – user2093601

+0

'लंबवत-संरेखण' पर अधिक जानकारी के लिए [यह सीएसएस चाल लेख] (http://css-tricks.com/what-is-vertical-align/) देखें। यह इतनी मुश्किल लगती है कि यह कुछ प्रतीत होता है। – CherryFlavourPez

0

सब कुछ डालने के बारे में उत्तर इनलाइन-ब्लॉक के रूप में सही है। दस्तावेज़ प्रवाह के बाहर तत्वों को तोड़ने के अलावा फ्लोट उस स्थिति में आपके लिए कुछ भी नहीं कर रहा है।

Example Fiddle

और प्रासंगिक सीएसएस परिवर्तन यहाँ हैं:

हालांकि, अगर आप पुराने ब्राउज़र लक्षित कर रहे हैं, यहाँ एक समाधान है कि उन है कि समर्थन नहीं करते के लिए काम करना चाहिए ऊर्ध्वाधर- align तालिका सेल के बाहर है
header { 
    position:relative; 
    display:block; 
} 
header:after { 
    visibility: hidden; 
    display: block; 
    font-size: 0; 
    content:" "; 
    clear: both; 
    height: 0; 
} 
header nav { 
    width: 70%; 
    font-size: 1em; 
    position: absolute; 
    top: 50%; 
    line-height: 200%; 
    margin-top: -2em; 
} 
+0

[ट्वीविंग का थोड़ा सा] (http://blog.mozilla.org/webdev/2009/02/20/cross-browser-inline-block/) 'इनलाइन-ब्लॉक' हर जगह काम करेगा, आईई 6 + – CherryFlavourPez

+0

लिंक सहित आपने प्रदान किया है कि कुछ अर्थात् गलत प्रथाओं को प्रोत्साहित किया जा रहा है, 'इनलाइन-ब्लॉक' संपत्ति के काम को दूर करने के लिए मानक के कुछ सीधे उल्लंघन का उल्लेख न करें। आपको 'li' तत्व के अंदर 'div' नहीं डालना चाहिए, और आपको IE7 को ठीक करने के लिए पुराने सीएसएस इनलाइन हैक्स को पेश नहीं करना चाहिए। मूल समाधान में एचटीएमएल 5 तत्वों के अलावा, जो मैंने प्रदान किया है, उसे समाधान के साथ _creative_ प्राप्त किए बिना आईई 6 पर वापस काम करना चाहिए। –

+0

सच है, पुराने आईई को कुछ हैकिंग की आवश्यकता है (यद्यपि * तकनीकी रूप से * 'li' के अंदर 'div' के साथ कुछ भी गलत नहीं है, बस आपको थोड़ा गंदा महसूस हो सकता है)। निजी तौर पर, मैं आधुनिक ब्राउज़र के लिए 'इनलाइन-ब्लॉक' समाधान और एक सशर्त स्टाइलशीट का उपयोग करता हूं ताकि इसे पुरानी आईई में काम करने के लिए आवश्यक हो। पूर्ण स्थिति, नकारात्मक मार्जिन और 200% लाइन-ऊंचाई मेरे लिए अधिक नाजुक और हैकी लगती है। – CherryFlavourPez

0

यहां ऐसा करने का एक तरीका है जिसमें आपके मार्क-अप में एक छोटा बदलाव शामिल है।

<div id="header"> 
<header role="banner"> 
    <nav id="navigation" role="navigation"> 
     <ul> 
      <li> 
       <img src="http://i1207.photobucket.com/albums/bb466/audetwebdesign/jsFiddle%20Demos/chamber-logo.png"> 
      </li> 
      <li><a href="#" title="About Us">About Us</a> 

      </li> 
      <li><a href="#" title="Biographies">Biographies</a> 

      </li> 
      <li><a href="#" title="Services">Services</a> 

      </li> 
      <li><a href="#" title="Careers">Careers</a> 

      </li> 
      <li><a href="#" title="Contact">Contact</a> 

      </li> 
     </ul> 
    </nav> 
    </header> 
</div> 

और सीएसएस लगता है: कुंजी

#header { 
     background-color: #cccccc; 
     padding: 5px 0; 
    } 
    header { 
     background-color: #f0f0f0; 
    } 
    header nav { 
     border: 1px solid red; 
    } 
    header nav ul { 
     margin: 0; 
     padding: 0; 
    } 
    header nav li { 
     display: inline; 
     margin: 0; 
     padding: 0; 
    } 
    header nav li img { 
     vertical-align: middle; 
     border: 1px solid blue; 
    } 
    header nav li a { 
     vertical-align: middle; 
     font-size: 1.00em; 
     text-decoration: none; 
     background-color: white; 
     color: black; 
     padding: 10px; 
     margin: 0 0 0 10px; 
    } 

अपनी सूची के पहले <li> तत्व में लोगो छवि जगह है। फिर आप सूची के सभी तत्वों को inline के रूप में प्रदर्शित करते हैं और उन्हें लाइन करने के लिए vertical-align: middle का उपयोग करते हैं।

आप सटीक रूप से देखने के लिए पैडिंग और मार्जिन गुणों को समायोजित कर सकते हैं। संदर्भ के लिए

फिडल: http://jsfiddle.net/audetwebdesign/adW9Y/

नोट:
कोड भी अपने छवि का आकार व्यूपोर्ट के साथ पैमाने पर करने के लिए अनुमति देता है के लिए उधार देता है।

निम्नलिखित सीएसएस नियम जोड़ कर:

.autoSize { 
    width: inherit; 
} 
.autoSize img { 
    width: 25%; 
} 

और इस प्रकार मार्क-अप करने के लिए एक वर्ग को जोड़ने:

<li class="autoSize"> 
    <img src="http://i1207.photobucket.com/albums/bb466/audetwebdesign/jsFiddle%20Demos/chamber-logo.png"> 
</li> 

के बाद से ul तत्व दृश्य पोर्ट की चौड़ाई के लिए विस्तारित, आप छवि को लपेटने वाले बच्चे li तत्व की चौड़ाई का उत्तराधिकारी बना सकते हैं। फिर आप छवि के लिए एक सापेक्ष चौड़ाई निर्धारित करते हैं (इस उदाहरण में 25%) और आपको लचीला/उत्तरदायी स्केलिंग मिलता है।

+0

यह काफी साफ है, लेकिन यह ओपी की आवश्यकताओं में से एक को संबोधित करने में विफल रहता है, अर्थात् छवि व्यूपोर्ट चौड़ाई के अनुसार आकार बदलती है। इस उदाहरण में, यह एक निश्चित आकार है। – CherryFlavourPez

+0

आपके द्वारा उपयोग किए जाने वाले 'इनलाइन-ब्लॉक' दृष्टिकोण को मूल मार्क-अप का अधिक सम्मान मिलता है, इसलिए यह इस मामले में बेहतर दृष्टिकोण है। आपकी टिप्पणी ने मुझे सीएसएस की समीक्षा करने के लिए प्रेरित किया और कोड कुछ अतिरिक्त शैलियों को सेट करके छवि को अनुमति दे सकता है, कृपया मेरी पोस्ट में नोट देखें। मैं आपकी प्रतिक्रिया की सराहना करता हूं, सबसे अच्छा! –

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