Будь-який спосіб оголосити розмір / часткову межу в полі?


101

Будь-яким способом оголосити розмір / часткову межу до поля у CSS? Наприклад, у вікні з 350pxцим відображається лише рамка в нижній частині 60px. Я думаю, що це може бути дуже корисно.

Приклади:

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

Відповіді:


152

Не зовсім. Але дуже легко досягти ефекту таким чином, що виграшно погіршується і не вимагає зайвої розмітки:

div {
  width: 350px;
  height: 100px;
  background: lightgray;
  position: relative;
  margin: 20px;
}

div:after {
  content: '';
  width: 60px;
  height: 4px;
  background: gray;
  position: absolute;
  bottom: -4px;
}
<div></div>


3
Ніщо так, як позначення правильної відповіді без позначення +1. Але я поставив вам +1! Це було ідеальне рішення для моєї проблеми. Дякую! редагувати Я припускаю, ти міг поставити +1 для ОП та -1 за когось іншого. Що ж, добре. Я вдячний вашій відповіді, і це все, що важливо, правда ;-)
CWSpear

7
Як ви отримуєте, щоб це було в центрі, як у його другому прикладі?
Cameron Martin

Я повинен додати, коли батьківським елементом є вбудований елемент ширини рідини. Очевидно, коли це фіксована ширина, це легко.
Cameron Martin

4
Неважливо, я отримав бажаний ефект - dabblet.com/gist/e5a78f2d4bf50b6be4d3 . Це ганьба ::outsideі ::insideпсевдо-елементи ще не доступні, я ненавиджу покласти в розмітці тільки для укладання, але я не думаю , що є якийсь - небудь інший спосіб.
Cameron Martin

Це працює! Для того, щоб використовувати його з React, ви не можете використовувати contentв :afterякості вбудованого стилю або JSS, але він відмінно працює з використанням стилізованих компонентів.
Рафаель Пінель

23

Я знаю, це вже вирішено, і запитували пікселі. Однак я просто хотів чимось поділитися ...

Частково підкреслені текстові елементи можна легко досягти, використовуючи display:tableабоdisplay:inline-block

(Я просто не використовую, display:inline-blockтому що, так, ви знаєте, незручний 4pxпробіл).

Текстові елементи

h1 {
  border-bottom: 1px solid #f00;
  display: table;
}
<h1>Foo is not equal to bar</h1>

Центрируючи , display:tableробить неможливим центрування елемента за допомогою text-align:center.
Давайте обійдемося з margin:auto...

h1 {
  border-bottom: 1px solid #f00;
  display: table;
  margin-left: auto;
  margin-right: auto;
}
<h1>Foo is not equal to bar</h1>

Ну , це приємно, але це не частково .
Як уже було представлено книжкову книгу , псевдоелементи варті золота.

h1 {
  display: table;
  margin-left: auto;
  margin-right: auto;
}

h1:after {
  border-bottom: 1px solid #f00;
  content: '';
  display: block;
  width: 50%;
}
<h1>Foo is not equal to bar</h1>

Зміщений , підкреслення прямо зараз вирівняно за лівим краєм. Щоб відцентрувати його, просто натисніть псевдоелемент на половину його width( 50% / 2 = 25%) вправо.

h1 {
  display: table;
  margin-left: auto;
  margin-right: auto;
}

h1:after {
  border-bottom: 1px solid #f00;
  content: '';
  display: block;
  margin-left: 25%;
  width: 50%;
}
<h1>Foo is not equal to bar</h1>

... як зауважив davidmatas , використання margin:autoчасом буває більш практичним, ніж обчислення marginзсуву вручну.

Отже, ми можемо вирівняти підкреслення ліворуч, праворуч або по центру (не знаючи струму width), використовуючи одну з таких комбінацій:

  • Зліва : margin-right: auto (або просто залиште це)
  • Середній :margin: auto
  • Право :margin-left: auto

Повний приклад

.underline {
  display: table;
  margin-left: auto;
  margin-right: auto;
}

.underline:after {
  border-bottom: 1px solid #f00;
  content: '';
  display: block;
  width: 50%;
}

.underline--left:after {
  margin-right: auto; /* ...or just leave it off */
}

.underline--center:after {
  margin-left: auto;
  margin-right: auto;
}

.underline--right:after {
  margin-left: auto
}
<h1 class="underline underline--left">Foo is not equal to bar</h1>
<h1 class="underline underline--center">Foo is not equal to bar</h1>
<h1 class="underline underline--right">Foo is not equal to bar</h1>

Елементи блочного рівня

Це можна легко прийняти, щоб ми могли використовувати елементи рівня блоку. Фокус полягає у встановленні висоти псевдоелементів на ту саму висоту, що і його реальний елемент (просто height:100%):

div {
  background-color: #eee;
  display: table;
  height: 100px;
  width: 350px;
}
div:after {
  border-bottom: 3px solid #666;
  content: '';
  display: block;
  height: 100%;
  width: 60px;
}
<div></div>


2
Чудова відповідь. Для :afterмне больше нравится в margin: 0 autoпідході замість цього , margin-left: 25%тому що він буде працювати з будь-якою шириною ви заявляєте без необхідності робити математику.
davidmatas

1
@davidmatas Гарна думка! Я щойно використав метод математики, щоб пояснити, як розташувати його вручну. З цього прикладу кожен міг зрозуміти, як вирівняти його вліво / по центру / вправо. У будь-якому разі, я додам auto- спрощувач :)
yckart

15

Ось ще одне рішення, яке покладається на те, linear-gradientде ви зможете легко створити будь-який бажаний вам рядок. Ви також можете мати кілька рядків (наприклад, на кожній стороні), використовуючи кілька фонів:

Ось ще один синтаксис для досягнення того ж, що і вище:

.box1 {
  width: 200px;
  padding: 20px;
  margin: 10px auto;
  text-align: center;
  background: 
   linear-gradient(#000, #000) top /40% 3px no-repeat, 
   #ccc
}

.box2 {
  width: 200px;
  padding: 20px;
  margin: 10px auto;
  text-align: center;
  background: 
    linear-gradient(red,red) bottom/ 60% 2px no-repeat, 
    #ccc;
}

.box3{
  width: 200px;
  padding: 20px;
  margin: 10px auto;
  text-align: center;
  background: 
   linear-gradient(red , red)bottom left/ 60% 2px,
   linear-gradient(blue, blue) 60% 0 / 40% 2px,
   linear-gradient(brown, brown) left/ 3px 30%,
   linear-gradient(orange, orange) right / 3px 40%,
   #ccc;
  background-repeat:no-repeat;
}
<div class="box1">
  Box1
</div>
<div class="box2">
  Box2
</div>
<div class="box3">
  Box3
</div>


1
Ого ... Я цілими годинами возився, щоб знайти спосіб, щоб відображався лише верхній лівий та правий верхній кут вікна "мається на увазі". : до і: після було занадто обмеженим, воно зіпсувало позиціонування об'єкта. Це чудове рішення!
Воутер

Деякі довідкові відомості про те, чому і як це працює: webfx.com/blog/web-design/background-css-shorthand
Wouter

2

Я використовував сітку для побудови малювання деяких меж.

Дивіться тут .

Код:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Responsive partial borders</title>
    <style>
        /* ungrid without mobile */
        .row{width:100%;display:table;table-layout:fixed;}
        .col{display:table-cell;}

        /* things to change */
        .row{width: 70%; margin: auto;}
        .mid.row > .col{ height: 150px; }

        /* draw box and align text */
        .col{ text-align: center;}
        .top.left.col{
            border-top: 1px solid black;
            border-left: 1px solid black;
        }
        .top.right.col{
            border-top: 1px solid black;
            border-right: 1px solid black;
        }
        .bottom.left.col{
            border-bottom: 1px solid black;
            border-left: 1px solid black;
        }
        .bottom.right.col{
            border-bottom: 1px solid black;
            border-right: 1px solid black;
        }
        .mid.row > .col{
            border-left: 1px solid black;
            border-right: 1px solid black;
            vertical-align: middle;
        }
        .top.center.col{
            position: relative;
            top: -0.5em;
        }
        .bottom.center.col{
            position: relative;
            bottom: -0.5em;
        }
    </style>
</head>
<body>

    <div class="row">
        <div class="top left col"></div>
        <div class="top center col">Top</div>
        <div class="top right col"></div>
    </div>
    <div class="mid row">
        <div class="col">Mid</div>
    </div>
    <div class="row">
        <div class="bottom left col"></div>
        <div class="bottom center col">Bottom</div>
        <div class="bottom right col"></div>
    </div>  

</body>
</html>

@ SverriM.Olsen, оскільки особа редагувала код, коментар застарів
Sagar V

0

CSS не підтримує часткові межі. Вам потрібно буде використовувати сусідній елемент, щоб імітувати це.


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