2016-03-01 6 views
5

प्रश्न बहुत छोटा नहीं है, लेकिन समझना आसान है।टेबल पर नकारात्मक मार्जिन के साथ अजीब चीजें

यहाँ jsFiddle

है मुझे लगता है कि जैसे दो नेस्टेड तालिकाओं है,:

<table class="outer"> 
    <tr> 
    <td></td> 
    <td> 
     <table class="inner"> 
     <tr> 
      <td></td> 
      <td></td> 
      <td></td> 
     </tr> 
     </table> 
    </td> 
    <td></td> 
    </tr> 
</table> 

<style> 
table, tr, td { 
    border: 1px solid black; 
    border-collapse: collapse; 
} 

table { 
    width: 100%; 
} 

.outer { 
    height: 100px; 
} 

.inner { 
    background-color: #ccc; 
    height: 50px; 
} 
</style> 

1 अजीब बात

:

enter image description here

यहाँ मार्कअप है फिर, मैं एक नकारात्मक घोड़ा जोड़ना चाहता हूँ भीतरी मेज पर izontal मार्जिन:

.inner { 
    margin: 0 -10%; 
} 

उम्मीद उत्पादन कुछ इस तरह है:

enter image description here

लेकिन बजाय, मैं इस मिल:

enter image description here

समस्या हो सकती है div में आंतरिक तालिका रखकर हल किया जाना चाहिए:

<!-- outer table --> 
    <div class="wrapper"> 
    <table class="inner-wrapped"> 
     <tr> 
     <td></td> 
     <td></td> 
     <td></td> 
     </tr> 
    </table> 
    </div> 
<!-- outer table --> 

<style> 
.wrapper { 
    margin: 0 -10%; 
} 

.inner-wrapped { 
    background-color: rgb(0,200,0); 
    height: 50px; 
} 
</style> 

2 अजीब बात

मैं नकारात्मक horizonal मार्जिन -10px सेट करते हैं (पहले हम percents, नहीं पिक्सेल का उपयोग), तो अतिरिक्त में उस तालिका केवल बाईं ओर (जैसे पहले मामले में) ले जाता है, यह sigifically चौड़ाई में कम कर देता है:

.inner { 
    margin: 0 -10px; 
} 

enter image description here

सवाल

  • यह दोनों चीजें क्यों होती हैं?

  • इसे हल करने का कोई तरीका क्या है? क्या यह केवल एक रैपर का उपयोग करने के लिए एक अच्छा अभ्यास है, जैसा कि मैं करता हूं, या मुझे एक और अधिक चालाक तरीका का उपयोग करना चाहिए?

+0

क्रोम निरीक्षक पर से बढ़ने नेस्ट बॉक्स को देखो, अगर। (सफेद नारंगी और हरा) जो चौड़ाई, पैडिंग और मार्जिन का वर्णन करता है और यह अधिक समझ में आता है – Ibu

+0

क्योंकि ['टेबल लेआउट: ऑटो'] (https://www.w3.org/TR/CSS21/tables।एचटीएमएल # ऑटो-टेबल-लेआउट) spec द्वारा पूरी तरह से परिभाषित नहीं है, यह कार्यान्वयन-निर्भर है। ब्राउज़र सामग्री को ध्यान में रखने का प्रयास करते हैं, लेकिन आपके मामले में यह बहुत सारी परिपत्र परिभाषाओं का कारण बनता है। परिणाम पर भरोसा मत करो। यदि आप एक अच्छी तरह से परिभाषित एल्गोरिदम चाहते हैं तो आप ['table-layout: fixed'] (https://www.w3.org/TR/CSS21/tables.html#fixed-table-layout) आज़मा सकते हैं। – Oriol

+0

@Oriol धन्यवाद, दिलचस्प –

उत्तर

3

तो मुख्य तालिका है width:100%; यह सभी तरह का विस्तार होगा और मन की तालिका में संदर्भ के लिए प्रारंभिक 100% ले जाएगा। ऋणात्मक मार्जिन तब तक विस्तार नहीं करेगा जब तक कि कोई सामग्री इसे न करे। यह काम करेगा अगर: https://jsfiddle.net/md2tx2d4/2/

.inner { margin:0 -10%; width:120%;} 

या आप चौड़ाई के बिना जीना यह जाने और इसे अपनी सामग्री

table { } 
td {width:200px;/* instead real content missing here */} 

https://jsfiddle.net/md2tx2d4/1/

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