我的页面上有两个垂直Div。左边的那个有一个属性表。单击某个属性会导致显示正确的div并显示该属性的详细信息。我正在使用http://cssarrowplease.com/中解释的CSS箭头,所有外观和效果都很好。问题是箭头总是在同一个地方。我希望它与被点击的元素/行处于同一高度。
这是我尝试过的:(顺便说一下,我正在使用Knockout,所以这是来自淘汰赛点击事件。我已经确认“位置”是正确的)
function viewConflicts(data, event) {
var position = $(event.target.parentElement).position();
$('.arrow_box:after').css('top', position.top);
$('.arrow_box:before').css('top', position.top);
}
以下是改编自上述网站的CSS:
.arrow_box:after, .arrow_box:before {
right: 100%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
}
.arrow_box:after {
border-color: rgba(136, 183, 213, 0);
border-right-color: #cbcece;
border-width: 30px;
/*top: 50%;*/
margin-top: -30px;
}
.arrow_box:before {
border-color: rgba(194, 225, 245, 0);
border-right-color: red;
border-width: 31px;
/*top: 50%;*/
margin-top: -31px;
}
通常它是垂直居中的,显然是由于“顶部:50%”。当我发表评论并使用上面的函数时,它会将两个元素垂直放在不同的位置,两者都朝向顶部。
答案 0 :(得分:0)
显然你不能使用jquery直接设置伪类。见Changing width property of a :before css selector using JQuery
此解决方案效果很好:
$('body').append('<style>.arrow_box:before{top:' + (position.top + 8) + 'px !important;}</style>');
$('body').append('<style>.arrow_box:after{top:' + (position.top + 8) + 'px !important;}</style>');
另外,我必须用.offset()替换.position(),因为position返回了相对值。
var position = $(event.target.parentElement).offset();