контур лише на одному кордоні


86

Як застосувати вставну межу до елемента HTML, але лише з одного боку. До цього часу я використовував для цього зображення (GIF / PNG), яке потім використовував би як фон і розтягував його (repeat-x) і розташував трохи від верхньої частини мого блоку. В останнім часом я виявив начерки CSS властивість, яке відмінно! Але, схоже, обводить цілий блок ... Чи можливо використовувати цю властивість структури, щоб зробити це лише на одній межі? Крім того, якщо ні, чи є у вас якийсь трюк CSS, який міг би замінити фонове зображення? (щоб я міг пізніше персоналізувати кольори контуру за допомогою CSS тощо). Спасибі заздалегідь!

Ось зображення того, що я намагаюся досягти: http://exiledesigns.com/stack.jpg


7
Ваше посилання мертве. Ви можете просто вставити зображення безпосередньо у питання, використовуючи інструмент зображення.
toddmo

Відповіді:


46

Контур дійсно стосується всього елемента .

Тепер, коли я бачу ваш імідж, ось як його досягти.

.element {
  padding: 5px 0;
  background: #CCC;
}
.element:before {
  content: "\a0";
  display: block;
  padding: 2px 0;
  line-height: 1px;
  border-top: 1px dashed #000; 
}
.element p {
  padding: 0 10px;
}
<div class="element">
  <p>Some content comes here...</p>
</div>

(Або див. Зовнішню демонстрацію. )

Всі розміри та кольори - це просто заповнювачі, ви можете змінити їх, щоб відповідати точно бажаному результату.

Важлива примітка : .element повинен мати display:block;(за замовчуванням для div), щоб це працювало. Якщо справа не в цьому, будь ласка, надайте повний код, щоб я міг розробити конкретну відповідь.


Привіт, Джіона, я щойно додав зображення до свого запитання, щоб було зрозуміліше: мені потрібен простір між межами мого блоку та моєї межі.
Корінне

Дякую @GionaF, але, схоже, межа все ще знаходиться "над" блоком, а не "всередині". (що таке \ a0? просто випадковий вміст для створення блоку?) exiledesigns.com/stack2.jpg (я пробував з 5-кратним заповненням, але нічого не змінювалось)
Корінне

1
@DominicTobias, якого я насправді не пам’ятаю ;-)
Гіона,

1
Для довідки \a0- це нерозривний простір.

1
Для мого випадку використання взяв це і трохи змінив. Потрібно додати абсолютну позицію зверху та ширину 100% елемента з псевдокласом: before та відносну позицію до елемента, якщо хтось інший має таку ж проблему.
josh1978

130

Ви можете використовувати box-shadowдля створення контуру з одного боку. Мовляв outline, box-shadowне змінює розмір коробки моделі.

Це ставить рядок зверху:

box-shadow: 0 -1px 0 #000;

Я створив jsFiddle, де ви можете перевірити його в дії.


ВСТАВИТИ

Для межі вставки використовуйте ключове слово inset . Це ставить вставну лінію зверху:

box-shadow: 0 1px 0 #000 inset;

За допомогою операторів, розділених комами, можна додати кілька рядків. Це поміщає вставну лінію зверху та ліворуч:

box-shadow: 0 1px 0 #000 inset,
            1px 0 0 #000 inset;

Щоб дізнатися більше про те, як це box-shadowпрацює, перегляньте сторінку MDN .


1
Мені подобається такий творчий підхід, дякую за поділ!
NPC

Ви не створили вставну межу і не пояснюєте синтаксис для box-shadow. Дякую.
toddmo

У цього є обмеження, якщо потрібна спеціальна межа стилю!
Андріс


1

Я знаю, що це старе. Але так. Я вважаю за краще набагато коротше рішення, ніж відповідь Гіони

[contenteditable] {
    border-bottom: 1px solid transparent;
    &:focus {outline: none; border-bottom: 1px dashed #000;}
}

0

Я люблю надати моєму полі введення межу, видалити контур у фокусі та замість цього "окреслити" межу:

input {
  border: 1px solid grey;

  &:focus {
    outline: none;
    border-left: 1px solid violet;
  }
 }

Ви також можете зробити це з прозорою облямівкою:

input {
  border: 1px solid transparent;

  &:focus {
    outline: none;
    border-left: 1px solid violet;
  }
 }

-1

Чудова річ у HTML / CSS полягає в тому, що зазвичай існує більше ніж один спосіб досягти того самого ефекту. Ось ще одне рішення, яке робить те, що ви хочете:

<nav id="menu1">
    <ul>
        <li><a href="#">Menu Link 1</a></li>
        <li><a href="#">Menu Link 2</a></li>
    </ul>
</nav>

nav {
    background:#666;
    margin:1em;
    padding:.5em 0;
}
nav ul {
    border-top:1px dashed #fff;
    list-style:none;
    padding:.5em;
}
nav ul li {
    display:inline-block;
}
nav ul li a {
    color:#fff;
}

http://jsfiddle.net/10basetom/uCX3G/1/


-2

лише одна сторона outlineне зможе працюватиborder-left/right/top/bottom

якщо я отримую належним чином ваш коментар

введіть тут опис зображення


2
Як зробити кордон ліворуч / праворуч / тощо вставленим? Як, наприклад, 3 пікселі від межі блоку, але всередині ?
Корінне

@CorinneStoppelli не могли б ви пояснити?
Database_Query

@Database_Query, я думаю, що ти пропустив частину використання контурного експерта (або подібного), а це означає, що він не хоче додавати більше ваги / висоти до div. Властивість border насправді додає, але контур - ні. Альтернатива box-shadow, здається, є кращим варіантом, навіть якщо вам потрібно трохи пограти з її опціями.
xarlymg89
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.