jQuery / CSS:更改边框颜色无法与边框折叠一起正常工作
jQuery / CSS: Changing border color not working properly with border-collapse
我是 CSS 和 jQuery 的新手,希望有人能帮助我。
我有一个很大的 HTML table 是动态创建的。
在这个 table 中,我只是 想在将鼠标悬停在 td 上时突出显示它的边界 。
首先,我尝试在 CSS 中使用 :hover
,但我根本找不到在 CSS 中实现这一点的方法。在这种情况下似乎不起作用?
然后我尝试在文档就绪函数中使用 JS,它确实应用了边框颜色,但仅应用于四个边框边中的两个,我猜这是由 CSS' border-collapse:collapse;
引起的。
它在没有边框折叠的情况下工作,但我确实需要它作为双边框或 border-spacing: 0;
在这个大 table 中占用太多 space 并使 tds 看起来更小。
注意: 这仅指包含 div 的 tds,因为这样我想显示其中哪些是 editable。
谁能告诉我如何解决这个问题或还有哪些其他选择?
我的 JS:
$(document).on({
mouseenter: function(){
$(this).parent().css('border-color', 'blue');
},
mouseleave: function(){
$(this).parent().css('border-color', '');
}
}, 'div.editable');
我的CSS(仅相关部分):
#tblCalendar, #tblCalendar th, #tblCalendar td {
border: 1px solid #ccc;
border-collapse: collapse;
margin: 0;
}
我的HTML(例如td):
...<td><div contenteditable="true" class="editable"></div></td>...
非常感谢,
麦克
border-collapse
使得使用 border
很难做到这一点,但您可以使用 outline
代替,如下所示:
$(document).on({
mouseenter: function() {
$(this).parent().css('outline', '1px solid blue');
},
mouseleave: function(){
$(this).parent().css('outline', '');
}
}, 'div.editable');
#tblCalendar, #tblCalendar th, #tblCalendar td {
border: 1px solid #ccc;
border-collapse: collapse;
margin: 0;
position: relative;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="tblCalendar">
<tr>
<td><div contenteditable="true" class="editable">This is editable</div></td>
<td><div contenteditable="true" class="editable">This is editable</div></td>
<td>Not editable</td>
</tr>
<tr>
<td>Not editable</td>
<td><div contenteditable="true" class="editable">This is editable</div></td>
<td><div contenteditable="true" class="editable">This is editable</div></td>
</tr>
</table>
要扩展@RickHitchcock 的答案,您还可以使用 css ::before
伪元素来完成此操作。但是您必须设置 z-index: -1px
以便它允许您编辑 contenteditable
区域。
#tblCalendar th:hover::before,
#tblCalendar td:hover::before {
content: "";
position: absolute;
top: 0px; left: 0px; right: 0px; bottom: 0px;
border: 1px solid blue;
z-index: -1;
}
#tblCalendar, #tblCalendar th, #tblCalendar td {
border: 1px solid #ccc;
border-collapse: collapse;
margin: 0;
position: relative;
}
#tblCalendar th:hover::before,
#tblCalendar td:hover::before {
content: "";
position: absolute;
top: 0px; left: 0px; right: 0px; bottom: 0px;
border: 1px solid blue;
z-index: -1;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="tblCalendar">
<tr>
<td><div contenteditable="true" class="editable">This is a test</div></td>
<td><div contenteditable="true" class="editable">This is a test</div></td>
<td><div contenteditable="true" class="editable">This is a test</div></td>
</tr>
<tr>
<td><div contenteditable="true" class="editable">This is a test</div></td>
<td><div contenteditable="true" class="editable">This is a test</div></td>
<td><div contenteditable="true" class="editable">This is a test</div></td>
</tr>
</table>
我是 CSS 和 jQuery 的新手,希望有人能帮助我。
我有一个很大的 HTML table 是动态创建的。 在这个 table 中,我只是 想在将鼠标悬停在 td 上时突出显示它的边界 。
首先,我尝试在 CSS 中使用 :hover
,但我根本找不到在 CSS 中实现这一点的方法。在这种情况下似乎不起作用?
然后我尝试在文档就绪函数中使用 JS,它确实应用了边框颜色,但仅应用于四个边框边中的两个,我猜这是由 CSS' border-collapse:collapse;
引起的。
它在没有边框折叠的情况下工作,但我确实需要它作为双边框或 border-spacing: 0;
在这个大 table 中占用太多 space 并使 tds 看起来更小。
注意: 这仅指包含 div 的 tds,因为这样我想显示其中哪些是 editable。
谁能告诉我如何解决这个问题或还有哪些其他选择?
我的 JS:
$(document).on({
mouseenter: function(){
$(this).parent().css('border-color', 'blue');
},
mouseleave: function(){
$(this).parent().css('border-color', '');
}
}, 'div.editable');
我的CSS(仅相关部分):
#tblCalendar, #tblCalendar th, #tblCalendar td {
border: 1px solid #ccc;
border-collapse: collapse;
margin: 0;
}
我的HTML(例如td):
...<td><div contenteditable="true" class="editable"></div></td>...
非常感谢, 麦克
border-collapse
使得使用 border
很难做到这一点,但您可以使用 outline
代替,如下所示:
$(document).on({
mouseenter: function() {
$(this).parent().css('outline', '1px solid blue');
},
mouseleave: function(){
$(this).parent().css('outline', '');
}
}, 'div.editable');
#tblCalendar, #tblCalendar th, #tblCalendar td {
border: 1px solid #ccc;
border-collapse: collapse;
margin: 0;
position: relative;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="tblCalendar">
<tr>
<td><div contenteditable="true" class="editable">This is editable</div></td>
<td><div contenteditable="true" class="editable">This is editable</div></td>
<td>Not editable</td>
</tr>
<tr>
<td>Not editable</td>
<td><div contenteditable="true" class="editable">This is editable</div></td>
<td><div contenteditable="true" class="editable">This is editable</div></td>
</tr>
</table>
要扩展@RickHitchcock 的答案,您还可以使用 css ::before
伪元素来完成此操作。但是您必须设置 z-index: -1px
以便它允许您编辑 contenteditable
区域。
#tblCalendar th:hover::before,
#tblCalendar td:hover::before {
content: "";
position: absolute;
top: 0px; left: 0px; right: 0px; bottom: 0px;
border: 1px solid blue;
z-index: -1;
}
#tblCalendar, #tblCalendar th, #tblCalendar td {
border: 1px solid #ccc;
border-collapse: collapse;
margin: 0;
position: relative;
}
#tblCalendar th:hover::before,
#tblCalendar td:hover::before {
content: "";
position: absolute;
top: 0px; left: 0px; right: 0px; bottom: 0px;
border: 1px solid blue;
z-index: -1;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="tblCalendar">
<tr>
<td><div contenteditable="true" class="editable">This is a test</div></td>
<td><div contenteditable="true" class="editable">This is a test</div></td>
<td><div contenteditable="true" class="editable">This is a test</div></td>
</tr>
<tr>
<td><div contenteditable="true" class="editable">This is a test</div></td>
<td><div contenteditable="true" class="editable">This is a test</div></td>
<td><div contenteditable="true" class="editable">This is a test</div></td>
</tr>
</table>