Updated fiddle。彼らが表示されていたパディングとボーダーを持っていたので
あなたの真ん中の列のセルには、まだ少し示していました。空のセルのための
.column2 {
padding: 0;
border-width: 0;
}
table.focus .column2 {
padding: 1px;
border-width: 1px;
}
遷移問題がwidth
とmax-width
の両方を移行することによって解決することができます:
だから、これを修正するために、我々は
padding
と
0
から
border-width
focus
クラスが適用されると、その後、それらを追加設定しましたで追加
.column2 {
transition: width 1.5s ease, max-width 1.5s ease;
}
これら二つのことは、多少のサイズを変更する最初の行のセルの問題は、これまで私が言うことができるように、自分自身を修正するようです。それは、少なくとも限りそのフィドルのコードを心配していたとして、厳密には必要ではなかった、と私もちょうどからの移行プロパティのでtable.focus .column2
からの遷移を削除するので.column2
からvisibility
プロパティを削除含ま私が作った
その他のアップデート.column2
の通常のスタイルは、列を非表示に戻すためにfocus
クラスが削除されるとすぐにキックインされるため、表にfocus
クラスがある場合に再びセルに遷移プロパティを追加するのは実際は不要です。実際、そのスタイルは実際には何もしていませんでした。
編集: 2番目の列が隠されているとき、あなたはまだ最初と最後の列の間に小さなギャップを見ることができます。これは実際には2番目の列(またはそのセル)の幅ではありません。むしろ、これはテーブル全体のブラウザのデフォルトであるborder-spacing
とborder-collapse
のプロパティによって引き起こされます。
少なくともChromeでは、border-collapse
はseparate
に、2px
の値はデフォルトでborder-spacing
に設定されています。これらのプロパティのいずれかを変更すると、効果的に列の間のギャップを削除します:border-collapse: collapse
の設定
/* either */
table {
border-collapse: collapse;
}
/* or */
table {
border-spacing: 0px;
}
は私たちにきれいな外観を与えるだろうが、我々はそれをしている間、我々としてもまたborder-spacing
プロパティを変更することがあり(でもそれならば私たちが実際に何をしているのか分からないので、折りたたまれたボーダーでは何もしません)。次に、表の中央に太い境界線が1つ残っている問題が残りますが、第2列は非表示になります。これは、第1列の右境界線と第3列の左境界線の二重境界によって引き起こされます。これを消去するには、最初の列の右側の境界に0px
border-width
を設定します。
table {
border-spacing: 0px;
border-collapse: collapse;
}
.column1 {
border-right-width: 0px;
}
注:あなたの2列目background-color
あなたborder-color
と同じ色なので、あなたは右の境界線がときに最初の列から欠落していることを伝えることができない私たちの最終的な解決策は、このようになります2番目の列が展開されます。ただし、色を変えたい場合は、2番目の列が表示されているときに右端の枠が見つからないことがあります。おかげで今のところ、ほぼ完全な
table.focus .column1 {
border-right-width: 1px;
}
angular.module('app', [])
.controller('FrameController', function() {
var vm = this;
vm.message = 'Hello world';
var tabIndex = 0;
vm.pressTab = function() {
$('#table'+tabIndex).removeClass('focus');
\t if(tabIndex == 3) {
\t tabIndex = 0;
} else {
\t tabIndex++;
}
$('#table'+tabIndex).addClass('focus');
}
});
setTimeout(function() {
angular.bootstrap(document.getElementById('body'), ['app']);
});
#myContainer {
width: 700px;
font-size: 16px;
border: 1px solid red;
overflow: auto;
}
table {
border: 0.1em solid #ddd;
float: left;
margin: 0.5em;
border-spacing: 0px;
border-collapse: collapse;
}
table.focus {
border: 2px solid blue;
}
table td {
overflow: hidden;
vertical-align: top;
white-space: nowrap;
text-align: left;
border: 1px solid #ddd;
}
.column1 {
border-right-width: 0px;
}
.column1,
.column3 {
width: 4em;
}
.column2 {
background-color: #ddd;
width: 0em;
max-width: 0em;
padding: 0;
border-width: 0;
-webkit-transition: max-width 1.5s ease, width 1.5s ease;
-moz-transition: max-width 1.5s ease, width 1.5s ease;
transition: max-width 1.5s ease, width 1.5s ease;
}
table.focus .column2{
width: 10em;
max-width: 10em;
padding: 1px;
border-width: 1px;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="body">
<div ng-controller="FrameController as vm">
<div id="myContainer">
<table id="table1">
<tbody>
<tr>
<td class="column1" style="width: 80px">Red Apple</td>
<td class="column2"> Lorem ipsum dolor sit amet </td>
<td class="column3">U$ 0.12</td>
</tr>
<tr>
<td class="column1">Red Apple</td>
<td class="column2"> Lorem ipsum dolor sit amet, </td>
<td class="column3">U$ 0.12</td>
</tr>
</tbody>
</table>
<table id="table2">
<tbody>
<tr>
<td class="column1">Red Apple</td>
<td class="column2"></td>
<td class="column3">U$ 0.12</td>
</tr>
<tr>
<td class="column1">Red Apple</td>
<td class="column2"></td>
<td class="column3">U$ 0.12</td>
</tr>
</tbody>
</table>
<table id="table3">
<tbody>
<tr>
<td class="column1">Red Apple</td>
<td class="column2"> Lorem ipsum dolor sit amet </td>
<td class="column3">U$ 0.12</td>
</tr>
<tr>
<td class="column1">Red Apple</td>
<td class="column2"> Lorem ipsum dolor sit amet, </td>
<td class="column3">U$ 0.12</td>
</tr>
</tbody>
</table>
</div>
<button ng-click="vm.pressTab()"> Press Tab</button>
</div>
</div>
:それを修正するには、あなたのテーブルには
focus
クラスを持っているときに1つのより多くのスタイルを追加したいです! 唯一のことは、2番目の列のサイズが0ではないということです。 (少なくとも私のブラウザ(chrome)で) –答えを編集しました。短いバージョン:2番目の列*は隠れているときに0の幅を持ちますが、 'border-spacing'のためにまだギャップが見えています。それを変更したいのかどうかは分かりませんでした。もともとあなたのコードでそれを調整していないので、それを残しました。上記の新しいコードは列間のギャップを修正します。 – cjl750