取代横向规则或div边框之类的东西,我想做这样的事情:
我的标题
/ * * ---------------------- /
我的内容
注意Title和content之间的分隔符是字面意思是斜线,asterix,破折号,然后是星号和斜杠结束(它应该看起来像代码)。
我很好奇我如何在流体布局上实现这种效果,分隔线伸展以填充div的整个宽度。另外,我不想使用任何艺术品。只使用ascii就是完美的。
总结:如何创建动态调整大小的自定义ascii分隔符?我压力这可能必须主要在Javascript中完成,然后每次调整窗口大小时轮询div的宽度,然后计算填充该字符所需的字符长度(它是等宽字体)空间。这是在正确的轨道上吗?
答案 0 :(得分:1)
这可以在不使用带white-space
CSS属性的JavaScript的情况下实现:
#container {
width: 300px;
position: relative;
border: 1px dotted black;
}
#dashes {
white-space: nowrap;
width: 100%;
overflow: hidden;
}
#opencomment, #dashes, #closecomment {
position: absolute;
}
#opencomment, #closecomment {
background-color: #FFFFFF;
z-index: 10;
}
#closecomment {
right: 0px;
}

<div id='container'>
<h1>Title</h1>
<div id='opencomment'>/*</div>
<div id='dashes'>----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</div>
<div id='closecomment'>*/</div>
<!-- position:absolute elements don't affect the DOM, so we need to
"clear a line" -->
<div> </div>
<p>Content</p>
</div>
&#13;
我只是用了一些荒谬的破折号来填满大屏幕。您可以更改#container
的宽度以使其更宽或更窄,或者您可以完全删除#container
元素。
答案 1 :(得分:1)
这是一个很棒的问题,在制作这个仅限CSS的解决方案时,有很多乐趣。
(这需要针对每个新字体系列进行调整,因为字距调整存在差异,但它应该在同一系列的不同字体大小下相当不错。)
hr {
/* reset */
display: inline-block;
border: none;
/* sizing */
box-sizing: border-box;
width: 100%;
height: 0.1em;
/* dashes */
background-image: linear-gradient(90deg, rgba(0,0,0,0.8) 80%, transparent 80%); /* space */
background-size: 0.4em 0.4em; /* dash */
/* spacing between start/end */
padding: 0 0.7em;
background-clip: content-box;
/* anchor ::before/::after */
position: relative;
}
/* start/end */
hr::before,
hr::after {
position: absolute;
top: -0.5em;
}
hr::before {
content: '/*';
left: -0.1em;
}
hr::after {
content: '*/';
right: -0.1em;
}
<hr>