सीएसएस में "डबल" सीमाओं को रोकना


89

मान लें कि मेरे पास एक-दूसरे के बगल में दो divs हैं ( एक सीमा के साथ https://chrome.google.com/webstore/category/home )।

वहाँ एक रास्ता (अधिमानतः एक सीएसएस चाल) मेरी divs एक दोहरी सीमा की तरह दिखाई देने से रोकने के लिए है? इस छवि को बेहतर तरीके से समझने के लिए एक नज़र डालें:

"डबल" सीमा

आप देख सकते हैं कि जहां दो विभाग मिलते हैं, ऐसा प्रतीत होता है कि उनकी दोहरी सीमा है।


नहीं, मैं आइसोटोप के साथ इसका उपयोग कर रहा हूं इसलिए किसी तालिका का उपयोग नहीं कर सकता। डिव के अलग-अलग आकार हैं
जॉन स्मिथ

क्या यह केवल आपके लिए बाएं-दाएं का मुद्दा है, या क्या आपको इसके बारे में भी चिंता करने की जरूरत है?
विक्टरकिलो

काश सीएसएस में इसके लिए एक अच्छा समाधान होता। :-(
ऋचादस्टेल्मैच

जवाबों:


19

#divNumberOne { border-right: 0; }


11
यह ऐसा करने का एकमात्र वास्तविक तरीका है जो अन्य सामान को गड़बड़ नहीं करता है। यदि आपको कई तत्वों को करने की आवश्यकता है, तो नरक, 100 div का कहना है, आप ऐसा कर सकते हैं div { border-right: none; } div:last-child { border-right: 1px solid black; }जो आपको इच्छित प्रभाव प्रदान करेगा
एंडी

हाँ, यह हमेशा उस तरह से किया जा सकता है, लेकिन मैं सोच रहा था कि क्या ऐसा करने का शुद्ध-सीएसएस तरीका था, बिना एक से अधिक कक्षा का उपयोग किए बिना (मेरे पास अधिक पंक्तियां और कॉलम होंगे)
जॉन स्मिथ

3
यह शुद्ध सीएसएस है, मैंने एक छद्म वर्ग (पिछले बच्चे) का उपयोग किया है इसलिए मैंने वैसे भी html को संशोधित नहीं किया है, कई छद्म कक्षाएं हैं और मैं कहूंगा कि इस मार्ग से नीचे जाऊंगा क्योंकि मुझे नहीं लगता कि कोई विकल्प है
एंडी

Nth Child में देखें आप इसे अजीब और यहां तक ​​कि उपयोग कर सकते हैं या अपने लेआउट के आधार पर आप इसे अपने इच्छित तरीके से गणना कर सकते हैं।
मैक्सवेललीन

1
इसे सही उत्तर के रूप में क्यों स्वीकार किया गया? मैं वास्तव में यह नहीं सोचता कि वह क्या देख रहा था। यह निश्चित रूप से एक मापनीय समाधान नहीं है।
केविन बेहान

80

यदि हम ऐसे तत्वों के बारे में बात कर रहे हैं जो किसी विशेष क्रम में प्रकट होने की गारंटी नहीं दे सकते हैं (शायद एक पंक्ति में 3 तत्व, उसके बाद 2 तत्वों, आदि के साथ एक पंक्ति), तो आप कुछ चाहते हैं जो संग्रह में प्रत्येक तत्व पर रखा जा सके। । इस समाधान को कवर करना चाहिए:

.collection {
    /* these styles are optional here, you might not need/want them */
    margin-top: -1px;
    margin-left: -1px;
}

.collection .child {
    outline: 1px solid; /* use instead of border */
    margin-top: 1px;
    margin-left: 1px;
}

ध्यान दें कि पुराने ब्राउज़र (IE7 और पूर्व) में रूपरेखा काम नहीं करती है

वैकल्पिक रूप से, आप सीमाओं से चिपक सकते हैं और नकारात्मक मार्जिन का उपयोग कर सकते हैं:

.collection .child {
    margin-top: -1px;
    margin-left: -1px;
}

1
इसे साझा करने के लिए आपको धन्यवाद। मैं सचमुच घंटों के लिए इस पर काम कर रहा था, सीमा के नीचे जा रहा था (रूपरेखा के बजाय)। यह खूबसूरती से काम किया!
जेसी होउले

यह वास्तव में एक चतुर तकनीक है। चीयर्स!
दा .5

2
बहुत उपयोगी। मैं position: relative;left: 1px;नकारात्मक मार्जिन को वापस लाने के लिए भी जोड़ता हूं ।
बार्टोज़ वाल्की 10

1
यह वास्तव में स्मार्ट है !. मुझे लगता है कि इसका जवाब होना चाहिए।
पुन

यह उत्तर की तुलना में बेहतर है
CH4B

20

HTML:

<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>

सीएसएस:

div {
    border: 1px solid #000;
    float: left;
}

div:nth-child(n+2) {
    margin-left: -1px;
}

डेमो

IE8 समर्थन के लिए ie9.js शामिल करें (यह सभी सीएसएस चयनकर्ताओं / छद्म तत्वों के लिए बहुत उपयोगी है)।


यदि आपके पास एक से अधिक पंक्ति हैं, तो दूसरी पंक्ति में पहली div में कोई बायीं सीमा नहीं है और इस ट्रिक के साथ divs संरेखण 1px के लिए बाईं ओर जाते हैं
Afshin

क्या कोई और अधिक जटिल संस्करण नहीं था? एक बड़े के साथ तत्वों के बारे में क्या right-margin?
तक्षशिला

@afshin अगर मुझे उसका लेआउट नहीं दिखता है तो मैं एक विशिष्ट उत्तर कैसे दे सकता हूं?
जियोना

@feeela मुझे लगता है कि यह बहुत बुनियादी है। वैसे भी, right-marginप्रभावित नहीं करता है left-margin: jsfiddle.net/gionaf/D6tHK/1
Giona

1
यह पार्श्व दोहरी सीमाओं को हल करता है, लेकिन ऊर्ध्वाधर नहीं; नीचे / ऊपर की सीमाएँ अभी भी दोगुनी हैं। उन के लिए कोई संकेत?
डेल्फीरल्स

15

एक अन्य समाधान जिस पर विचार किया जा सकता है वह है सीएसएस एडजेंट सिबलिंग सेलेक्टर का उपयोग करना ।

सीएसएस

div {
    border: 1px solid black;
}

div + div {
    border-left: 0;
}

jsFiddle


अच्छी चाल, धन्यवाद! मैंने पाया कि मुझे बेहतर परिणाम मिला है border-left: none;अन्यथा मेरे पास div के शीर्ष पर एक छोटा सा अंतर है! (Firefox)।
IanB

आप उपयोग कर सकते हैंdiv + div { border-left: 0; }
सर्गेई स्टैडनिक

6

इसे प्राप्त करने के लिए आप विषम चयनकर्ता का उपयोग कर सकते हैं

.child{
   width:50%;
   float:left;
   box-sizing:border-box;
   text-align:center;
   padding:10px;
   border:1px solid black;
   border-bottom:none;
}
.child:nth-child(odd){
   border-right:none;
}
.child:nth-last-child(2),
.child:nth-last-child(2) ~ .child{
   border-bottom:1px solid black
}
<div>
    <div class="child" >1</div>
    <div class="child" >2</div>
    <div class="child" >3</div>
    <div class="child" >4</div>
    <div class="child" >5</div>
    <div class="child" >6</div>
    <div class="child" >7</div>
    <div class="child" >8</div>
</div>

यहाँ छवि विवरण दर्ज करें


यह nth- बच्चे (यहां तक ​​कि) {सीमा-बाएँ: कोई नहीं?} करने के लिए बेहतर नहीं होगा? इस तरह से स्तंभों की एक विषम संख्या हो सकती है ...
पिक्सेलएर्थ

6

मुझे शो के लिए देर हो रही है, लेकिन आउटलाइन प्रॉपर्टी का उपयोग करने की कोशिश करें, जैसे:

.item {
  outline: 1px solid black;
}

CSS में रूपरेखा भौतिक स्थान पर कब्जा नहीं करती है और इसलिए दोहरी सीमा को रोकने के लिए ओवरलैप करेगी।


यह भी काम करता है, जब छोटी स्क्रीन पर अधिक पंक्तियों में एक पंक्ति टूट जाती है - अन्य सभी उत्तर काम नहीं करते हैं जब आपकी div नई पंक्तियों में टूट सकती है। तुम तो एक सीमा के बिना एक पक्ष के साथ कम से कम एक div है। साझा करने के लिए thx
अपवर्तित

एक हैक की तुलना में एक समाधान के लिए बेहतर है। धन्यवाद।
फॉरेस्ट

5

यदि divs सभी का एक ही वर्ग नाम है:

div.things {
    border: 1px solid black;
    border-left: none;
}

div.things:first-child {
    border-right: 1px solid black;
}

यहाँ एक JSFiddle डेमो है।


+1 कुछ छद्म वर्गों में से एक, जिसे IE 7 + 8 से पहचाना जाता है ...
15

यह अच्छा नहीं है अगर आपका DIV 2 पंक्तियों में है: आपके पास 2 पंक्तियों के बीच एक दोहरी सीमा है ..
Didier68

@ Didier68 हालांकि यह सवाल नहीं था।
फ्रोजन पीज़

सवाल "दोहरी सीमाओं को रोक रहा है" ... लेकिन यह निर्दिष्ट किए बिना कि यह बाद में है या खड़ी है ... आपका समाधान उदाहरण के लिए <TD> के लिए अच्छा है, लेकिन DIV के लिए नहीं। मैं वही टिप्पणी स्टीफ़न बोलो को देता हूँ!
दिदिरे 68६68

मुझे पता नहीं है कि आप किस बारे में बात कर रहे हैं। प्रश्न डिव के बारे में है, उत्तर डिव के बारे में है, फिडेल डिव का उपयोग करता है। आप कहाँ से td प्राप्त कर रहे हैं?
फ्रोजन मटर की रोडी

2

फ्लेक्सबॉक्स का उपयोग करके एक दूसरे बच्चे के कंटेनर को ठीक से जोड़ना आवश्यक था ताकि एक दूसरे को ओवरलैप किया जा सके ...

<div class="grid__container">
    <div class="grid__item">
        <div class="grid__item-outline">
              <!-- content -->
        </div>
    </div>
</div>

एससीएसएस

.grid__container {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    margin: 0 1px 0 0; // margin-right 1px to give the correct width to the container
}

.grid__item {
    flex: 0 1 25%; // grid of 4
    margin: 0 0 1px; // margin-bottom to prevent double lines
}

.grid__item-outline {
    margin: 0 0 0 1px; // margin-left to prevent double lines
    outline: 1px solid #dedede;
}

1

निम्नलिखित सीएसएस को दाईं ओर दिए गए div में जोड़ें:

position: relative;
left: -1px; /* your border-width times -1 */

या बस सीमाओं में से एक को हटा दें।


1

मैं सिर्फ उपयोग करता हूं

border-collapse: collapse;

मूल तत्व में


0
  <div class="one"></div>
  <div class="two"></div>
  <div class="two"></div>
  <div class="two"></div>
  <div class="two"></div>

सीएसएस:

  .one{
    width:100px;
    height:100px;
    border:thin red solid;
    float:left;
  }
.two{
    width:100px;
    height:100px;
    border-style: solid solid solid none;

    border-color:red;
    border-width:1px;
    float:left;
}

jsFiddle


0

मेरा उपयोग मामला एक एकल पंक्ति में बक्से के लिए था जहां मुझे पता था कि अंतिम तत्व क्या होगा।

.boxes {
  border: solid 1px black  // this could be whatever border you need
  border-right: none;
}

.furthest-right-box {
  border-right: solid 1px black !important;
}

0

मुझे पता है कि यह देर से प्रतिक्रिया है, लेकिन मैं सिर्फ अपने 2 सेंट को गिराना चाहता था, क्योंकि मेरे ऐसा करने का तरीका यहां नहीं है।

आप देखें, मुझे वास्तव में मार्जिन के साथ खेलना पसंद नहीं है, खासकर नकारात्मक मार्जिन । हर ब्राउज़र इन को संभालने के लिए लगता है कि थोड़ा अलग है और हाशिये आसानी से बहुत सारी स्थितियों से प्रभावित होते हैं ।

यह सुनिश्चित करने का मेरा तरीका है कि मेरे पास divs के साथ एक अच्छी तालिका है, पहले एक अच्छा html संरचना बना रहा है , फिर सीएसएस लागू करें।

मैं इसे कैसे करता हूं इसका उदाहरण:

 <div class="tableWrap">
   <div class="tableRow tableHeaders">
     <div class="tableCell first">header1</div>
     <div class="tableCell">header2</div>
     <div class="tableCell">header3</div>
     <div class="tableCell last">header4</div>
   </div>
   <div class="tableRow">
     <div class="tableCell first">stuff</div>
     <div class="tableCell">stuff</div>
     <div class="tableCell">stuff</div>
     <div class="tableCell last">stuff</div>
   </div>
</div>

अब, सीएसएस के लिए, मैं केवल यह सुनिश्चित करने के लिए पंक्तियों की संरचना का उपयोग करता हूं कि बॉर्डर्स केवल वे हैं जहां उन्हें होने की आवश्यकता है, जिससे कोई मार्जिन न हो;

.tableWrap {
  display: table;
  }

.tableRow {
  display: table-row;
  }

.tableWrap .tableRow:first-child .tableCell {
  border-top: 1px solid #777777;
  }

.tableCell {
  display: table-cell;
  border: 1px solid #777777;
  border-left: 0;
  border-top: 0;
  padding: 5px;
  }

.tableRow .tableCell:first-child {
  border-left: 1px solid #777777;
  }

Et वसीला, एक आदर्श तालिका। अब, जाहिर है कि इससे आपके DIV को चौड़ाई (विशेष रूप से पहला वाला) में 1px अंतर होगा, लेकिन मेरे लिए, जिसने कभी भी किसी भी तरह का कोई मुद्दा नहीं बनाया है। यदि यह आपकी स्थिति में होता है, तो मुझे लगता है कि आप तब मार्जिन पर अधिक निर्भर होंगे।


0

मैं इस कोड का उपयोग करके इसे प्राप्त करने में सक्षम था:

td.highlight {
    outline: 1px solid yellow !important;
    box-shadow: inset 0px 0px 0px 3px yellow;
    border-bottom: 1px solid transparent !important;
}

0

एक बहुत पुराना सवाल है, लेकिन यह पहला Google परिणाम था, इसलिए किसी के लिए भी जो इस पर आता है और मोबाइल आदि पर तत्व के दाईं / बाईं ओर सीमा को फिर से जोड़ने के लिए मीडिया क्वेरी नहीं करना चाहता है।

मेरे द्वारा उपयोग किया जाने वाला समाधान है:

.element {
    border: 1px solid black;
    box-shadow: 0 0 0 1px black;
}

यह काम करता है क्योंकि आपको सीमा और छाया से बने तत्व के चारों ओर 2px की सीमा दिखाई देगी। हालांकि, जहां तत्व मिलते हैं, छाया ओवरलैप हो जाती है जो इसे 2px चौड़ा रखती है;


-1

margin:1px;अपने div के आसपास देने के बारे में क्या ।

<html>
<style>
.brd{width:100px;height:100px;background:#c0c0c0;border:1px solid red;float:left;margin:1px;}
</style>
<body>
    <div class="brd"></div>
    <div class="brd"></div>
    <div class="brd"></div>
</body>
</html>

डेमो


-3

मैं पृष्ठभूमि के रूप में उनके पीछे एक और div का उपयोग करना पसंद करता हूं और सभी सीमाओं को हटा देता हूं। आपको बस पृष्ठभूमि div के आकार और अग्रभूमि div की स्थिति की गणना करने की आवश्यकता है।


मुझे लगता है कि मेरा समाधान आलोचकों के लिए सबसे अच्छा है। यह 1 प्रिंसिपल टेबल 1 ड्राइंग के रूप में एक ही प्रिंसिपल है:
7
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.