2009-10-16 1 views
5

मैं के रूप में सरल एक परिभाषा सूची का उपयोग करना चाहते हैं:शैली एक definitition सूची के रूप में सरल कुंजी मान सेट

<dl> 
    <dt>name:</dt> 
    <dd>Tomas</dd> 

    <dt>address:</dt> 
    <dd>this is a very long wrapping address</dd> 

    <dt>age:<dt> 
    <dd>29</dd> 
<dl> 

की तरह कुछ रेंडर करने के लिए:

name: Tomas 
address: this is a very long 
wrapping address 
age: 29 

परिभाषा सूची शब्दार्थ लगता है यहां सबसे अच्छा विकल्प।

नए रन-इन प्रदर्शन शैली का प्रयोग चाल करना होगा:

<style> dt { display: run-in; } </style> 

लेकिन यह व्यापक रूप से अभी तक समर्थित नहीं है। एचटीएमएल को बदलने के बिना, मैं बेहतर क्रॉस-ब्राउज़र समर्थन (यानी आवश्यक नहीं) के लिए अपनी परिभाषा सूची कैसे शैलीबद्ध कर सकता हूं (वर्तमान में मैं इनलाइन डिस्प्ले का उपयोग करता हूं और बदसूरत पीआर जोड़ता हूं)? स्पष्ट करने के लिए

संपादित करें:

dt { clear: left; } 
dd { float: left; } 

क्योंकि यह प्रस्तुत करना होगा काम नहीं करेगा के रूप में:

name: Tomas 
address: this is a very long 
     wrapping address 
age: 29 

डिजाइन निर्दिष्ट करता है कि इन बहु लाइन क्षेत्र को बचाने के लिये लाइन के शुरू होने से लपेट चाहिए अंतरिक्ष।

उत्तर

8

मुझे लगता है कि यह काम करेगा:

dt { 
    float: left; 
    clear: left; 
    margin: 0; 
    padding: 0 .5em 0 0; 
} 
dd { 
    margin: 0; 
    padding: 0; 
} 

एक अन्य विकल्प है कि उपयोगी है :after छद्म वर्ग है। आप dt तत्वों में से प्रत्येक पर पेट के छोड़ सकता है और है:

dt:after { 
    content: ":"; 
} 

यह इसे और अधिक लचीला बनाता है और आप एक पूरे के रूप में सूची और वेबसाइट भर में उस चरित्र को बदलने, या यह से छुटकारा पाने के लिए यदि आप की तरह महसूस कर सकते हैं यह।

आपके द्वारा उल्लिखित रैपिंग समस्या को हल करने के लिए, आपको dt और dd तत्वों दोनों पर चौड़ाई निर्धारित करने की आवश्यकता होगी। या, "डेटा" के लिए नाम/पता आदि के लिए th और td के साथ तालिका का उपयोग करें। आईएमओ एक टेबल यहां एक अर्थात् स्वीकार्य समाधान है - यह टैब्यूलर डेटा है।

+0

आपका समाधान एक चेतावनी के साथ अच्छी तरह से काम करने लगता है: यदि एक डीडी खाली है तो नीचे डीडी गलत क्षेत्र में स्थानांतरित हो जाएगा! हालांकि मेरे आवेदन के लिए यह कोई समस्या नहीं है क्योंकि खाली लाइनें नहीं होंगी। धन्यवाद! – Tomas

+0

यदि आपको पता नहीं था, तो आपके पास प्रति 'dd' एकाधिक 'dt' तत्व हो सकते हैं और इसके विपरीत (" शब्द "होने का विचार कई परिभाषाएं हो सकता है और एक ही परिभाषा एकाधिक शर्तों के लिए उपयोग की जा सकती है)। आपके द्वारा उल्लिखित समस्या तब होती है क्योंकि खाली 'डीडी' को अनदेखा किया जाता है, इसलिए इसके लिए 'dt' को अगले' dt' के साथ समूहीकृत किया जाता है और दोनों बाद वाले 'डीडी' से जुड़े होते हैं। – DisgruntledGoat

+2

ओह, एक समाधान मिला: 'dt' पर 'clear: left' को हटाएं और इसे एक अलग नियम के रूप में जोड़ें:' dd: {content:"। "; दृश्यता: छुपा; साफ़ करें: बाएं; } ' – DisgruntledGoat

0

आप पिछले तत्व के बाईं ओर डीडी को बस फ्लोट कर सकते हैं।

dt { clear: left; } 
dd { float: left; } 

आप अतिरिक्त संरेखण के लिए या तो चौड़ाई विशेषता भी जोड़ सकते हैं।

dt { clear: left; width: 20%; } 
dd { float: left; } 
+0

काम नहीं करेगा क्योंकि यह डीडी सामग्री को छोड़ देगा यदि यह कई लाइनों पर लपेटता है। निर्दिष्ट डिज़ाइन चाहता है कि डीडी डेटा लाइन की शुरुआत में लपेटें जैसा कि प्रश्न में "पता" उदाहरण में दिखाया गया है। – Tomas

0

ठीक है, तो आप बस डीटी नाव दे सकता है: छोड़ दिया

dt { float: left; } 

वरना जाने डीटी प्रदर्शन इनलाइन:

dt { display: inline; } 
+0

डीटी {प्रदर्शन: इनलाइन; } काम नहीं करता है क्योंकि डीडी अभी भी एक ब्लॉक है (इसे आजमाएं)। डीटी {फ्लोट: बाएं; } – Tomas

+0

प्रश्न में स्पष्ट के रूप में काम नहीं करता है, मुझे खेद है कि मैंने गेटकिल्लर द्वारा सुझाए गए फ्लोटिंग डीडी को मिश्रित किया है, और आपके द्वारा सुझाए गए फ्लोटिंग डीटी और डिसग्रंटल्डगोट। यह काम करने लगता है .. – Tomas

0

मुझे लगता है कि (छोटे चौड़ाई के लिए परीक्षण करने के लिए टिप्पणी हटाएं पहली पंक्ति) इस:

dl, dd, dt { margin: 0; } 
/*dl { width: 80px; }*/ 
dl dt, dl dd { display: inline; } 
dl dd:after { content: ' '; padding-left: 100%; } 
0

आपको डीडी से डिफ़ॉल्ट बाएं मार्जिन को हटाने की आवश्यकता है।

dt {float:left;clear:left;margin-right:5px;} 
dd {margin:0;} 
संबंधित मुद्दे