Довжина межі менша, ніж ширина Div?


115

У мене є наступний код

div {
   width:200px;
   border-bottom:1px solid magenta;
   height:50px;   
}

DEMO

Ширина Div-200px, тому межа-bottom є також 200px, але що робити, якщо я хочу тільки border-bottom лише 100px, не змінюючи ширину div?

Відповіді:


224

Можна використовувати псевдоелементи. Напр

div {
  width   : 200px;
  height  : 50px;   
  position: relative;
  z-index : 1;
  background: #eee;
}

div:before {
  content : "";
  position: absolute;
  left    : 0;
  bottom  : 0;
  height  : 1px;
  width   : 50%;  /* or 100px */
  border-bottom:1px solid magenta;
}
<div>Item 1</div>
<div>Item 2</div>

Не потрібно використовувати додаткову розмітку для презентаційних цілей. : after також підтримується з IE8.

редагувати:

якщо вам потрібна правильна вирівняна межа, просто змініть left: 0наright: 0

якщо вам потрібна центральна рамка, просто встановіть left: 50px;


Це була і моя техніка, але зауважте, що вона надасть межу лівій половині дива. Якщо ви хочете, щоб його було по центру, подайте div:before left: 50px.
Chowlett

Питання не вказує, в якій позиції повинна з’являтися межа, тому я не розглядав інші позиції
Фабріціо Кальдеран

5
якщо ширина нижньої межі становить 50%, і ви хочете, щоб вона була по центру, стиль повинен бути таким, left: 25%оскільки він буде 25% + 50% + 25%
ковзання

5
Так, я знаю, що в цьому прикладі це працює. Але для інших, які роблять щось подібне, що, можливо, намагатиметься зробити його чуйним, можливо, вам доведеться використовувати%, як це було у тому випадку, на який я потребував відповіді.
лижі

4
Використовуйте margin: auto, right: 0, left: 0на :beforeцентрировать лінію. Оновіть, якщо це допомогло вам.
Ale_info

40

Інший спосіб зробити це (у сучасних браузерах) - це негативна розсипана тінь. Ознайомтесь з цією оновленою скрипкою: http://jsfiddle.net/WuZat/290/

box-shadow: 0px 24px 3px -24px magenta;

Я думаю, що найбезпечнішим і найбільш сумісним способом є прийнята відповідь вище. Просто думав, що поділюсь ще однією технікою.


9

Можна використовувати лінійний градієнт:

div {
    width:100px;
    height:50px;
    display:block;
    background-image: linear-gradient(to right, #000 1px, rgba(255,255,255,0) 1px), linear-gradient(to left, #000 0.1rem, rgba(255,255,255,0) 1px);
	background-position: bottom;
	background-size: 100% 25px;
	background-repeat: no-repeat;
    border-bottom: 1px solid #000;
    border-top: 1px solid red;
}
<div></div>


8

Я додав рядок під тегом h3, як це

<h3 class="home_title">Your title here</h3> 
.home_title{
    display:block;
}
.home_title:after {
    display:block;
    clear:both;
    content : "";
    position: relative;
    left    : 0;
    bottom  : 0;
    max-width:250px;
    height  : 1px;
    width   : 50%;  /* or 100px */
    border-bottom:1px solid #e2000f;
    margin:0 auto;
    padding:4px 0px;
}

4

Ви не можете мати межу іншого розміру, ніж сам div.

рішенням було б просто додати ще один div під чіткою, по центру або в абсолютному розміщенні, з бажаною рамкою в 1 піксель і висотою лише 1 піксель.

http://jsfiddle.net/WuZat/3/

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


3

Пізно до вечірки, але для всіх, хто хоче зробити 2 рамки (в моєму випадку внизу та вправо), ви можете використовувати техніку у прийнятій відповіді та додати: після psuedo-елемента для другого рядка, а потім просто змінити властивості, як так: http://jsfiddle.net/oeaL9fsm/

div
{
  width:500px;
  height:500px;   
  position: relative;
  z-index : 1;
}
div:before {
  content : "";
  position: absolute;
  left    : 25%;
  bottom  : 0;
  height  : 1px;
  width   : 50%;
  border-bottom:1px solid magenta;
}
div:after {
  content : "";
  position: absolute;
  right    : 0;
  bottom  : 25%;
  height  : 50%;
  width   : 1px;
  border-right:1px solid magenta;
}

2

У мене є випадок, коли в контейнері Div є деяка нижня межа між зображеннями і найкращим кодом рядка був - border-bottom-style: inset;


2
div{
    font-size: 25px;
    line-height: 27px;
    display:inline-block;
    width:200px;
    text-align:center;
}

div::after {
    background: #f1991b none repeat scroll 0 0;
    content: "";
    display: block;
    height: 3px;
    margin-top: 15px;
    width: 100px;
    margin:auto;
}

2

Я щось подібне зробив у своєму проекті. Я хотів би поділитися цим тут. Ви можете додати ще одну поділку як дитину та надати їй облямівку з невеликою шириною та розмістити її вліво, по центру чи праворуч за допомогою звичайного CSS

HTML-код:

    <div>
        content 
        <div class ="ac-brdr"></div>
    </div>

CSS, як показано нижче:

   .active {
    color: magneta;
  }
   .active .ac-brdr {
        width: 20px;
        margin: 0 auto;
        border-bottom: 1px solid magneta;
  }

1

Межі надається весь елемент html. Якщо ви хочете половину нижньої межі, ви можете обернути її іншим ідентифікованим блоком, наприклад, прольотом.

HTML-код:

<div> <span>content here </span></div>

CSS, як показано нижче:

 div{
    width:200px;
    height:50px;   
    }
 span{
        width:100px;
        border-bottom:1px solid magenta;   
    } 


1

Я просто зробив протилежне цьому, використовуючи :afterі ::afterтому, що мені потрібно було точно зробити нижню межу1.3rem :

Мій елемент дуже деформувався, коли я використовував, :beforeі :afterв той же час, оскільки елементи горизонтально вирівняні display: flex, flex-direction: rowі align-items: center.

Ви можете використовувати це для створення чогось більш широкого або вузького або, можливо, будь-яких модів математичного виміру:

a.nav_link-active {
  color: $e1-red;
  margin-top: 3.7rem;
}
a.nav_link-active:visited {
  color: $e1-red;
}
a.nav_link-active:after {
  content: '';
  margin-top: 3.3rem;      // margin and height should
  height: 0.4rem;          // add up to active link margin
  background: $e1-red;
  margin-left: -$nav-spacer-margin;
  display: block;
}
a.nav_link-active::after {
  content: '';
  margin-top: 3.3rem;      // margin and height should
  height: 0.4rem;          // add up to active link margin
  background: $e1-red;
  margin-right: -$nav-spacer-margin;
  display: block;
}

Вибачте, це SCSSпросто, помножте числа на 10 і змініть змінні на деякі нормальні значення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.