Javascript-форум (https://javascript.ru/forum/)
-   (X)HTML/CSS (https://javascript.ru/forum/xhtml-html-css/)
-   -   Расстояние между td и Chrome (https://javascript.ru/forum/xhtml-html-css/30442-rasstoyanie-mezhdu-td-i-chrome.html)

madd1 04.08.2012 14:23

Расстояние между td и Chrome
 
Здравствуйте.

Столкнулся с проблемой, необходимо, чтобы несколько элементов <td> подряд были якобы одним целым, то есть, если, например, повесить cursor: pointer; на <td>, то на границах он не должен меняться на стрелку, так, собственно и есть во всех браузерах (даже IE), а вот в Google Chrome это не так, если медленно вести курсор от <td> к <td> он на некоторое время станет стрелкой на их границе. Пробовал разные комбинации всяких свойств отступов, ничего не помогло :help:

<!DOCTYPE HTML>
<html lang="ru-RU">
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
table, td, tr {
	margin: 0;
	padding: 0;
	border-spacing: 0;
	border: 0;
	outline: 0;
}
td {
	cursor: pointer;
}
</style>
</head>
<body>
<table>
<tr>
<td>ffff</td><td>fff2</td>
</tr>
</table>
</body>
</html>


Надеюсь, понятно, что просто поставить cursor: pointer; всей таблице - не решение, так как это я лишь для примера сказал, мне просто важно убрать этот отступ (или что это?)

Спасибо.

devote 04.08.2012 14:32

вешайте курсор на TR

Deff 04.08.2012 14:35

<!DOCTYPE HTML>
<html lang="ru-RU">
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
table, td, tr {

	margin: 0;
	padding: 0;
	border:0 solid red;
	outline: 0;
}
table {
	border-collapse:collapse!important;
	border:1px solid red;
}
td {
	height:12px;
	width:12px;
	cursor:pointer;
}
</style>
</head>
<body>


<table>
   <tr>
     <td>ffff</td><td>fff2</td>
   </tr>
</table>


</body>
</html>

<!DOCTYPE HTML>
<html lang="ru-RU">
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
table, td, tr {

	margin: 0;
	padding: 0;
	border:0 solid red;
	outline: 0;
}
table {
	border-collapse:collapse!important;
	border:1px solid red;
}
td {
	height:12px;
	width:12px;
}
tr {
	cursor:pointer;
}
</style>
</head>
<body>


<table>
   <tr>
     <td>ffff</td><td>fff2</td>
   </tr>
</table>


</body>
</html>

Да, походу devote - Прав

madd1 04.08.2012 14:37

Цитата:

Сообщение от devote (Сообщение 194528)
вешайте курсор на TR

:no: Я же подписал там, что это не решение, курсор тут просто как пример, ладно, объясню еще более подробно, внутри одного <tr> будет, пускай, 6 <td>, 3 из них один элемент, 3 - другой. Причем курсор тут совершенно не при чем, мне нужно, чтобы пользователь не мог кликнуть мимо (в это отверстие), так как событие клика уйдет совершенно не туда, куда надо мне, надеюсь понятно пояснил.

В обоих Ваших примерах мой Chrome все равно между <td> делает курсор обычным, с кликами, значит, тоже беда.

devote 04.08.2012 14:39

madd1,
ну дык уберите промежутки между ячейками, и тогда не будет мышь попадать мимо.

Deff 04.08.2012 14:40

madd1
Воткните в ячейки <img c margin:-2px; - они будут перекрываться

devote 04.08.2012 14:46

а может в хроме просто есть еще какое нить свойство.. которое меняет таблицу.. Вообще нужно экспериментировать

devote 04.08.2012 14:52

есть у вебкита такая хрень, но вроде тоже от них мало толку.
-webkit-border-horizontal-spacing
-webkit-border-vertical-spacing

madd1 04.08.2012 14:56

Цитата:

Сообщение от Deff (Сообщение 194533)
madd1
Воткните в ячейки <img c margin:-2px; - они будут перекрываться

Это да :) Не обязательно img, работает и с обычным блоком, я думал, может у Хрома действительно есть какие-то доп. свойства для этого, как писали выше, а то такие костыли не очень люблю.

Deff 04.08.2012 15:11

madd1,
Цитата:

Сообщение от madd1
а то такие костыли не очень люблю.

Гы - а ежели есть пустые ячейки то для старых ие - один фиг такое нужно прокручивать - там пустые ячейки частенько не кликаются

madd1 04.08.2012 18:39

Цитата:

Сообщение от Deff (Сообщение 194544)
madd1,

Гы - а ежели есть пустые ячейки то для старых ие - один фиг такое нужно прокручивать - там пустые ячейки частенько не кликаются

В 8 и 9 всё ок, ниже уже нет смысла поддерживать, им предложу мобильную версию.

На самом деле, было достаточно добавить вот такой вот span в самый последний <td> и проблема решилась для всех:
Цитата:

<span style="margin-left:-1px;">&nbsp;</span>

Aetae 04.08.2012 22:01

А почему не использовать обычный colspan и не извращаться со склеиванием ячеек?)

Кстати, Deff, давно хотел спроcить: зафига вы используете !important где ни попадя? Это в конечном итоге может хорошенько запутать.

Deff 04.08.2012 22:17

Aetae,
Для border-collapse:collapse!important; привычка - использую всегда !important; если нужно слепить навечно, в ие есть траблы (отмена сего не волевого свойства) при добавке юзерами своих пользовательских сss тегов - экспериметаторов дофига - потом пол-дня ищешь
Ps: !important; Естественно ставицо в 99% cлучаев на ID

madd1 04.08.2012 23:15

Цитата:

Сообщение от Aetae (Сообщение 194602)
А почему не использовать обычный colspan и не извращаться со склеиванием ячеек?

Потому что эти ячейки входят в состав кнопок, но при этом являются отдельными столбцами таблицы (для динамических отступов).

В итоге, вот моя полная реализация, теперь работает во всех нужных мне браузерах без багов, может и лучше всё это можно было реализовать, но пока, мне нравится:
<!DOCTYPE HTML>
<html lang="ru-RU">
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
*{margin:0;padding:0;}
.table {
    display: table;
    width: 40%;
    background: #afa;
	float: left;
}
.table2 {
    display: table;
    width: 60%;
    background: #faa;
	float: left;
}
.table2>ul,
.table>ul {
    display: table-row;
}
.table2>ul>li,
.table>ul>li {
    display: table-cell;  
	white-space: nowrap;
	cursor: pointer;
}
.table2>ul>.spacer,
.table>ul>.spacer {
    width: 15%;
	 border-left: 1px solid red;
}
.table2>ul>.spacer2,
.table>ul>.spacer2 {
    width: 15%;
   
}
.clS {
	margin-left: -1px;
}
</style>

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" charset="utf-8">
	$(function(){
		$('#nav1>li').mouseover(function() {
			if ($.browser.msie && $.browser.version < 9) return;
			if ($(this).hasClass("spacer")) $(this).next("li").css("opacity", 0.7);
			else if ($(this).hasClass("spacer2")) $(this).prev("li").css("opacity", 0.7);
			else $(this).css("opacity", 0.7);
		});
		$('#nav1>li').mouseout(function(e) {
			if ($.browser.msie && $.browser.version < 9) return;
			if ($(this).hasClass("spacer")) $(this).next("li").css("opacity", 1);
			else if ($(this).hasClass("spacer2")) $(this).prev("li").css("opacity", 1);
			else $(this).css("opacity", 1);
		});
		$('#nav1>li').click(function(e) {
			var thid = e.target.id;
			if (thid[0] == 'c' && thid[1] == '1') {
				alert('[table1] Clicked №'+thid[2]);
			}
			else if (thid[0] == 'c' && thid[1] == '2') {
				alert('[table2] Clicked №'+thid[2]);
			}
			else {
				if ($(this).hasClass("spacer")) $(this).next("li").click();
				else $(this).prev("li").click();
			}
		});
	});
</script>
</head>
<body>
<div class="table">
    <ul id="nav1">
		<li class="spacer"></li>
		<li id="c11">Ячейка 1</li>
		<li class="spacer2"></li>
        <li class="spacer"></li>
        <li id="c12">Ячейка 2</li>
        <li class="spacer2"></li>
        <li class="spacer"></li>
        <li id="c13">Ячейка 3</li>
        <li class="spacer2"><span class="clS">&nbsp;</span></li>
    </ul>
</div>

<div class="table2">
    <ul id="nav1">
		<li class="spacer"></li>
		<li id="c21">Ячейка 1</li>
		<li class="spacer2"></li>
        <li class="spacer"></li>
        <li id="c22">Ячейка 2</li>
        <li class="spacer2"></li>
        <li class="spacer"></li>
        <li id="c23">Ячейка 3</li>
        <li class="spacer2"><span class="clS">&nbsp;</span></li>
    </ul>
</div>
</body>
</html>

devote 04.08.2012 23:17

madd1,
а где кнопочка "запустить" ?

madd1 04.08.2012 23:19

Цитата:

Сообщение от devote (Сообщение 194618)
madd1,
а где кнопочка "запустить" ?

Поправил.

Deff 04.08.2012 23:23

madd1,
+
Вот эту фигню вынести в отдельную функцию с передачей двух параметров this и цифру opacity (хотя имхо терпит
if ($.browser.msie && $.browser.version < 9) return;
056	            if ($(this).hasClass("spacer")) $(this).next("li").css("opacity", 1);
057	            else if ($(this).hasClass("spacer2")) $(this).prev("li").css("opacity", 1);
058	            else $(this).css("opacity", 1);

Aetae 04.08.2012 23:31

Таблица с помощью li. Это уже маразм, имхо.)

madd1 04.08.2012 23:44

Цитата:

Сообщение от Aetae (Сообщение 194625)
Таблица с помощью li. Это уже маразм, имхо.)

Может Вы и правы, однако одну строчку я бы не стал называть таблицей, это, скорее, список, поэтому ul li как-то (имхо) больше подходят чисто семантически, а вот свойства табличек пришлось забрать :yes: (Да, я знаю, что эти свойства не поддерживаются IE6-7, но IE6-7 не поддерживаются мной, так что не проиграл ;) ).

bes 05.08.2012 12:22

Требует доработки, использовать не рекомендуется
<style>
	td {
		border: solid 1px;
		width: 200px;
		cursor: pointer;
		
	}
	table {
		border: solid 1px;
	}
</style>

<table id="table">
	<tr>
		<td>1</td>
		<td>2</td>
		<td>3</td>
	</tr>
	</table>
	
<script>
window.onload =function () {
	var table = document.getElementById('table');
	table.onclick = function (e) {
		e = e || event;
		var target = e.target || e.srcElement;
		if (target.parentNode.tagName == 'TR') {
			alert(target.innerHTML);
		} else if (target.tagName == 'TABLE') {
			var x = e.clientX;
			var y = e.clientY;
			while (target.parentNode.tagName != 'TR') {
				x++;
				y++;
				target = document.elementFromPoint(x, y);
				if (target.parentNode.tagName == 'TR') {
					alert(target.innerHTML);
					break;
				} else if (target.tagName != 'TABLE') {
					alert('ha');
					break;
				}
			}
		}
	}
}
</script>

madd1 05.08.2012 14:06

Цитата:

Сообщение от bes (Сообщение 194667)
Требует доработки, использовать не рекомендуется

Интересная реализация :) Но вряд ли лучше костыля со спаном по быстродействию.

bes 05.08.2012 14:38

Цитата:

Сообщение от madd1
Интересная реализация Но вряд ли лучше костыля со спаном по быстродействию.

Считаю, что не стоит вообще заморачиваться над такими вещами, кликнет не там (вероятность чего очень низкая), ничего не произойдёт и всё (есть желание, можно вывести сообщение: "кликнете там, где надо").

madd1 05.08.2012 15:03

Цитата:

Сообщение от bes (Сообщение 194689)
Считаю, что не стоит вообще заморачиваться над такими вещами, кликнет не там (вероятность чего очень низкая), ничего не произойдёт и всё (есть желание, можно вывести сообщение: "кликнете там, где надо").

Я бы удивился, например, если бы на каком-то сайте кликал на кнопку, а она бы не кликнулась, хочу заботиться о пользователях :write:

bes 05.08.2012 15:20

Цитата:

Сообщение от madd1
Я бы удивился, например, если бы на каком-то сайте кликал на кнопку, а она бы не кликнулась, хочу заботиться о пользователях

Похвально, но даже когда делаешь обработчики типа onclick, если при отпускании кнопки мыши, выйти за пределы элемента (что кстати часто происходит при быстрых кликах), то обработчик не срабатывают, вывод - надо быть аккуратней (когда завязано на деньги, обычно люди всегда аккуратней), психология такова: если не преследуются какие-то специальные цели, стремишься кликнуть по центру ячейки.
Что вам даст реализация этого способа, кроме как личного развития при его реализации: если человек кликает авось куда (а кликая на грани, абсолютно точно нельзя сказать, в какую ячейку попадёшь, только если элементы не огромного размера, а если даже они огромного размера, то пространство между ячейками также можно заметить (можно понять, что кликаешь в никуда)) ;)


Часовой пояс GMT +3, время: 04:32.