Невозможно? HTML <TD> изменение цвета границы при наведении курсора на изменение границы?

Я хочу иметь таблицу, в которой все границы (внутренние / внешние) имеют ширину в один пиксель, я достигаю этого, установив стиль border-collapse в таблице.

Затем я хочу записать onmouseover в каждую ячейку TD, изменив цвет border-color на другой. Это нормально работает, если граница таблицы не была свернута. Но если свернуть границу, это не сработает.

Однако, если я не сверну границу, я не смогу получить границу шириной в один пиксель!

Так разве это невозможно?

Обновлено: Чтобы уточнить, при использовании border-collapse и установке цвета границы TD устанавливаются только правая и нижняя граница.

РЕДАКТИРОВАТЬ Обновлено: В итоге я реализовал это изменение фона при наведении курсора мыши. Фон GIF представляет собой белое поле с рамкой. УУУУХ! Хотя отлично работает во всех браузерах ...

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
0
4 820
3

Ответы 3

Есть ли способ вообще отказаться от использования таблицы и вместо этого использовать div? Это немного болезненнее с точки зрения начальной настройки, но в конце, я думаю, вы можете обнаружить, что в долгосрочной перспективе легче манипулировать.

План B верен, не говоря уже о том, что onmouseover технически не является допустимой разметкой для <TD> и может работать некорректно во всех браузерах (IE был первым, кто это поддержал).

TravisO 08.01.2009 18:01

Я понимаю, что это действительно старый пост, но подумал, что все равно внесу свой вклад, если он будет полезен.

Не знаете, как у вас работает фоновое изображение с рамкой, если вы не используете точную ширину и высоту в пикселях для всех ячеек таблицы?

Но другой вариант - использовать «контур» вместо границы при наведении курсора. Бывший.:

table { border-collapse: collapse; }
table td { border: solid 1px gray; }
table td:hover { border: none; outline: solid 1px red; }

Работает во всех браузерах, кроме IE6.

В зависимости от цвета, который вы используете, внешний вид может быть не идеальным, но он работает довольно хорошо.

да, я тоже знаю, что это старый пост .. Я сделал это так, что работает во всех браузерах! Просто создайте элемент, пусть это будет #cellsel. Не забудьте установить позиционирование на абсолютное или относительное и соответственно установить левую и верхнюю части и z-index, display на none (чтобы быть невидимым вначале). Теперь стратегия состоит в том, чтобы использовать jquery для прикрепления #cellsel к td при наведении курсора мыши ..., худшая часть - играть с событиями mouseenter / mouseleave / mousemove и переменной флага, чтобы проверить, когда мышь покинула конкретный td. ...

  $('***td selector***').mouseenter(
  function(e){
  var $this= $(this);

  if (!ins){//global variable ins -- this is our flag!
    var off= $this.offset();
    var w= $this.width()-1;
    var h= $this.height()-1;
    //#cellsel is the element i created to draw over a td when the mouse hovers a particular td..
    $('#cellsel').css({'top':off.top+'px', 'left':off.left+'px', 'width':w+'px', 'height':h+'px', 'display':'block'});
    ins=true;

    $this.bind('mouseleave',function(){
      $(this).unbind('mouseleave');
      ins=false;
    });
  }//#grid is the table!
  }).parents('#grid').mousemove(
      function(e){
        if (ins){
          var $this= $(this).find('#cellsel');
          var off= $this.offset();
          var w= $this.width();
          var h= $this.height();

          if ( (e.pageX < off.left) || (e.pageY < off.top) || (e.pageX > (off.left + w)) || (e.pageY > (off.top + h)) )
            ins=false;                    
        }
    });

Буду признателен, если кто-то другой внесет исправление в это или лучший ответ ... спасибо! Кроме того, нет необходимости использовать таблицы, вы можете сделать то же самое, используя вложенные блоки div и оставленный css float! Чтобы обеспечить обрушение границы, примените такой jquery:

$('***selector to all divs except the ones with the css clear propiety set***').css({'float': 'left', 'width': '100px', 'border': '1px solid #CCC','margin-bottom':'-1px','margin-right':'-1px'});

Другие вопросы по теме