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