html – 如何应用圆角边框突出显示/选择

前端之家收集整理的这篇文章主要介绍了html – 如何应用圆角边框突出显示/选择前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经使用了 Visual Studio Online一段时间的项目,他们在他们的在线代码查看器中选择圆形边框的方式非常有趣:

我已经尝试检查元素并寻找某种自定义CSS,但没有运气。

我有一种感觉,这需要一些复杂的“黑客”使其工作,但似乎非常有趣,因为我从来没有看过它。

他们如何能够将圆形边框应用于选择?

注意:正常选择完全隐藏在WHILE选择中,舍入选择就像常规选择一样跟随您的光标。没有选择任何东西后。

编辑:我有created a fork的@ Coma的答案应该在Firefox中工作,并选择鼠标如果移动使用:

  1. $(document).on('mousemove',function () {

(某些情况下的边界仍然可以使用工作。)

解决方法

不完美,但它的工作:

http://jsfiddle.net/coma/9p2CT/

删除真正的选择

  1. ::selection {
  2. background-color: transparent;
  3. }

添加一些样式

  1. span.highlight {
  2. background: #ADD6FF;
  3. }
  4.  
  5. span.begin {
  6. border-top-left-radius: 5px;
  7. border-bottom-left-radius: 5px;
  8. }
  9.  
  10. span.end {
  11. border-top-right-radius: 5px;
  12. border-bottom-right-radius: 5px;
  13. }
  14.  
  15. pre.merge-end > span:last-child {
  16. border-bottom-right-radius: 0;
  17. }
  18.  
  19. pre.merge-end + pre > span:last-child {
  20. border-top-right-radius: 0;
  21. }
  22.  
  23. pre.merge-begin > span:first-child {
  24. border-bottom-left-radius: 0;
  25. }
  26.  
  27. pre.merge-begin + pre > span:first-child {
  28. border-top-left-radius: 0;
  29. }

将节点元素中的每个字符包起来

  1. var format = function () {
  2.  
  3. var before = -1;
  4. var html = $.trim(editor.text())
  5. .split("\n")
  6. .reverse()
  7. .map(function (line) {
  8.  
  9. var a = line.length === before ? 'merge-end' : '';
  10. before = line.length;
  11.  
  12. return '<pre class="' + a + '"><span>' + line.split('').join('</span><span>') + '</span></pre>';
  13. })
  14. .reverse()
  15. .join('');
  16.  
  17. editor.html(html);
  18. };

获取选定的节点并突出显示,照顾他们的父母

  1. var getSelectedNodes = function () {
  2.  
  3. var i;
  4. var nodes = [];
  5. var selection = rangy.getSelection();
  6.  
  7. for (i = 0; i < selection.rangeCount; ++i) {
  8.  
  9. selection
  10. .getRangeAt(i)
  11. .getNodes()
  12. .forEach(function (node) {
  13.  
  14. if ($(node).is('span')) {
  15.  
  16. nodes.push(node);
  17. }
  18. });
  19. }
  20.  
  21. return nodes;
  22. };
  23.  
  24. var highlight = function (nodes,beforeNode) {
  25.  
  26. var currentNode = $(nodes.shift()).addClass('highlight');
  27. var currentParent = currentNode.parent();
  28.  
  29. if (beforeNode) {
  30.  
  31. var beforeParent = beforeNode.parent();
  32.  
  33. if (currentParent.get(0) !== beforeParent.get(0)) {
  34.  
  35. currentNode.addClass('begin');
  36. beforeNode.addClass('end');
  37. beforeParent.addClass('merge-begin');
  38. }
  39.  
  40. } else {
  41.  
  42. currentNode.addClass('begin');
  43. }
  44.  
  45. if (nodes.length) {
  46.  
  47. highlight(nodes,currentNode);
  48.  
  49. } else {
  50.  
  51. currentNode.addClass('end');
  52. }
  53. };
  54.  
  55. format();
  56.  
  57. $(document).on('mouseup',function () {
  58.  
  59. $('.highlight').removeClass('highlight begin end');
  60. highlight(getSelectedNodes());
  61. });

感谢Tim Down Rangy

猜你在找的HTML相关文章