Скажем, у меня есть два блока div рядом друг с другом (возьмите https://chrome.google.com/webstore/category/home в качестве ссылки) с рамкой.
Есть ли способ (желательно трюк с CSS), чтобы мои div не выглядели как двойные границы? Взгляните на это изображение, чтобы лучше понять, что я имею в виду:
Вы можете видеть, что там, где встречаются два div, кажется, что у них есть двойная граница.
Ответы:
#divNumberOne { border-right: 0; }
источник
div { border-right: none; } div:last-child { border-right: 1px solid black; }
что дало бы желаемый эффектЕсли мы говорим об элементах, появление которых не может быть гарантировано в каком-либо определенном порядке (может быть, 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; }
источник
position: relative;left: 1px;
, чтобы вернуть отрицательную маржу.HTML:
<div>1</div> <div>2</div> <div>3</div> <div>4</div>
CSS:
div { border: 1px solid #000; float: left; } div:nth-child(n+2) { margin-left: -1px; }
Демо
Включите ie9.js для поддержки IE8 (это очень полезно для всех селекторов / псевдоэлементов CSS).
источник
right-margin
?right-margin
не влияетleft-margin
: jsfiddle.net/gionaf/D6tHK/1Еще одно решение, которое можно было бы рассмотреть, - это использовать селектор соседних элементов CSS .
CSS
div { border: 1px solid black; } div + div { border-left: 0; }
jsFiddle
источник
border-left: none;
иначе у меня будет небольшой промежуток в верхнем левом углу div !? (Fire Fox).div + div { border-left: 0; }
Вы можете использовать нечетный селектор для достижения этого
.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>
источник
Если все div имеют одинаковое имя класса:
div.things { border: 1px solid black; border-left: none; } div.things:first-child { border-right: 1px solid black; }
Здесь есть демонстрация JSFiddle .
источник
Я опаздываю на шоу, но попробуйте использовать свойство контура, например:
.item { outline: 1px solid black; }
Контуры в CSS не занимают физического пространства и поэтому будут перекрываться, чтобы предотвратить двойную границу.
источник
Добавьте следующий CSS в div справа:
position: relative; left: -1px; /* your border-width times -1 */
Или просто удалите одну из границ.
источник
Я просто использую
border-collapse: collapse;
в родительском элементе
источник
При использовании Flexbox необходимо было добавить второй дочерний контейнер, чтобы контуры должным образом перекрывали друг друга ...
<div class="grid__container"> <div class="grid__item"> <div class="grid__item-outline"> <!-- content --> </div> </div> </div>
SCSS
.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; }
источник
<div class="one"></div> <div class="two"></div> <div class="two"></div> <div class="two"></div> <div class="two"></div>
CSS:
.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
источник
Мой вариант использования был для ящиков в одной строке, где я знал, каким будет последний элемент.
.boxes { border: solid 1px black // this could be whatever border you need border-right: none; } .furthest-right-box { border-right: solid 1px black !important; }
источник
Я знаю, что это запоздалая реакция, но я просто хотел сбросить свои 2 цента, так как моего способа сделать это здесь нет.
Понимаете, мне очень не нравится играть с полями, особенно с отрицательными полями . Кажется, что каждый браузер обрабатывает это только немного по-разному, а поля легко зависят от множества ситуаций.
Мой способ убедиться, что у меня хорошая таблица с div, - сначала создать хорошую структуру html , а затем применить css.
Пример того, как я это делаю:
<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>
Теперь для css я просто использую структуру строк, чтобы убедиться, что границы находятся только там, где они должны быть, без полей;
.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 voila, идеальный стол. Теперь очевидно, что это приведет к тому, что ваши DIV будут иметь различия в ширине в 1 пиксель (в частности, первый), но для меня это никогда не создавало никаких проблем. Если это так в вашей ситуации, я думаю, тогда вы будете больше зависеть от маржи.
источник
Я смог добиться этого с помощью этого кода:
td.highlight { outline: 1px solid yellow !important; box-shadow: inset 0px 0px 0px 3px yellow; border-bottom: 1px solid transparent !important; }
источник
Очень старый вопрос, но это был первый результат Google, поэтому для всех, кто сталкивается с этим и не хочет, чтобы медиа-запросы повторно добавляли границу справа / слева от элемента на мобильном телефоне и т. Д.
Я использую следующее решение:
.element { border: 1px solid black; box-shadow: 0 0 0 1px black; }
Это работает, потому что вы увидите рамку в 2 пикселя вокруг элемента, состоящего из границы и тени. Однако там, где элементы встречаются, тень накладывается, и ширина остается 2 пикселя;
источник
А как насчет того, чтобы
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>
ДЕМО
источник
Я предпочитаю использовать другой div позади них в качестве фона и удалять все границы. Вам нужно просто рассчитать размер фонового div и положение div переднего плана.
источник