Любой способ объявить размер / частичную границу в поле?



любой способ объявить размер / частичную границу в поле в css3? Например, коробка с 350px, которая показывает только нижнюю границу в ее первых 60px. Я думаю, что это может быть очень полезно.



примеры:



enter image description hereenter image description here

523   5  

5 ответов:

Не совсем так. Но это очень легко достичь эффекта таким образом, что деградирует изящно и не требует лишней разметки:

div {
  width:350px; 
  height:100px; 
  background:lightgray; 
  position:relative;
 }
div:after {
  content:''; 
  width:60px; 
  height:4px; 
  background:gray; 
  position:absolute; 
  bottom:-4px;
}

демо

я знаю, это уже решено и пиксели были запрошены. Тем не менее, я просто хотел поделиться чем-то...

частично подчеркнутые текстовые элементы могут быть легко достигнуты с помощью 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>

вот еще одно решение, которое опирается на линейный градиент, где вы можете легко создать все виды линий, которые вы хотите. Вы также можете иметь несколько строк (в каждой стороне, например) с помощью нескольких справочная информация:

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

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

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

вот еще один синтаксис для достижения того же, что и выше:

.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 no-repeat,
  linear-gradient(blue, blue) 60% 0 / 40% 2px no-repeat,
  linear-gradient(brown, brown) left/ 3px 30% no-repeat,
  linear-gradient(orange, orange) right / 3px 40% no-repeat
  #ccc
}
<div class="box1">
  Box
</div>
<div class="box2">
  Box
</div>
<div class="box3">
  Box
</div>

я использовал сетку, чтобы построить нарисовать некоторые границы.

посмотреть здесь.

код:

<!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>

CSS не поддерживает частичные границы. Вам нужно будет использовать соседний элемент для имитации этого.

Comments

    Ничего не найдено.