我想要从<div>
或<span>
的右上角到左下角绘制一条对角线。问题是内容有时会更长或更短。所以,像静态图像这样的东西是行不通的。基本上我想要这里描述的内容(How to create a diagonal line within a table cell?),但需要<div>
或<span>
。
这有一些有趣的想法:http://jsfiddle.net/zw3Ve/11/
这样做:http://css-tricks.com/forums/discussion/13384/diagonal-line/p1
这是在这篇文章中的重试:How to strike through obliquely with css
我似乎无法解决任何问题。看起来纯CSS解决方案应该在这里工作,但我只是没有技能来实现这一点。 jQuery也是我的选择。
答案 0 :(得分:22)
您可以使用内联SVG背景,仅使用CSS而不使用javascript。
.background {
// Draw an SVG top left to bottom right
background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' version='1.1' preserveAspectRatio='none' viewBox='0 0 10 10'> <path d='M0 0 L0 10 L10 10' fill='red' /></svg>");
background-repeat:no-repeat;
background-position:center center;
//scale it
background-size: 100% 100%, auto;
}
看我的小提琴:
答案 1 :(得分:10)
第一个小提琴作为背景中的图像而不是很好吗?
http://jsfiddle.net/zw3Ve/410/
.line {
display:inline-block;
border: 1px solid #ccc;
margin: 10px;
padding: 10px;
background:url(http://i.piccy.info/i7/c7a432fe0beb98a3a66f5b423b430423/1-5-1789/1066503/lol.png);
background-size:100% 100%;
}
答案 2 :(得分:4)
实际上这更像是关于几何的问题而不是编码问题。使用正方形这很容易,但是对于矩形,您必须自己进行数学计算。还记得那些孩子抱怨他们永远不必在“现实生活”中计算对角线的长度吗? :P 这是我做的:
div.container /*makes a square container (300x300)*/
{
width: 300px;
height: 150px;
background-color: #aaa;
padding-top: 150px;
}
div.line
{
position: relative;
z-index: 1;
left: -61px; /*this is something I don't understand but apparently is required*/
width: 423px; /*since container is a square this equals to its diagonal: 300*1.41*/
height: 1px;
background-color: #000;
transform: rotate(45deg); /*again, this is easy since its a square. In rectangle you'll have to find a tangent*/
-ms-transform: rotate(45deg);
-webkit-transform: rotate(45deg);
}
HTML:
<div class="container">
<div class="line"></div>
</div>
和jsfiddle:http://jsfiddle.net/LWAKn/
答案 3 :(得分:4)
您可以像这样使用SVG图像:
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
<svg version="1.1" baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" width="200px" height="50px" viewBox="0 0 200 50">
<line fill="none" stroke="#000" x1="0" y1="0" x2="200" y2="50"/>
</svg>
将其设置为span或div的背景
.class-of-div-or-span { background: url("line.svg") no-repeat scroll 0 0 / 100% 100% transparent; }
注意:您必须提供范围display:block
或display:inline-block
才能发挥作用。
您还可以内联svg,在对象标记中使用它或将其嵌入到CSS中。
答案 4 :(得分:3)
您可以使用线性渐变来完成此操作。例如,如果我想要一个从左下角到右上角对角切割的绿色和白色方块,我给它这个背景属性:
background: linear-gradient(to bottom right, white, white 50%, green 50%, green);
这意味着它在左上角以白色开始,一直是白色,一直到对角线。转换立即从白色变为绿色,没有实际渐变,因为两者都设置为50%。如果你想要一条灰线,你可以试试这个:
background: linear-gradient(to bottom right, white, white 48%, gray 48%, gray 52%, green 52%, green);