Authored by xuqi

Merge branch 'feature/product' of http://git.dev.yoho.cn/web/yohobuy into feature/product

@@ -20,6 +20,6 @@ @@ -20,6 +20,6 @@
20 {{!-- 搜索 --}} 20 {{!-- 搜索 --}}
21 {{#if searchListPage}} 21 {{#if searchListPage}}
22 <script> 22 <script>
23 - seajs.use('js/product/list'); 23 + seajs.use(['js/product/list', 'js/product/product']);
24 </script> 24 </script>
25 {{/if}} 25 {{/if}}
@@ -4,5 +4,6 @@ require('./js/common'); @@ -4,5 +4,6 @@ require('./js/common');
4 4
5 require('./js/home/home'); 5 require('./js/home/home');
6 require('./js/product/list'); 6 require('./js/product/list');
  7 +require('./js/product/product');
7 8
8 module.exports = webYohobuy; 9 module.exports = webYohobuy;
  1 +/**
  2 + *Description: 商品自定义事件
  3 + *Author: chenglong.wang@yoho.cn
  4 + *Date: 2015/12/3
  5 + */
  6 +
  7 +var $ = require('yoho.jquery');
  8 +
  9 +function ProductEvent() {
  10 +
  11 + this.handlers = {};
  12 +
  13 +}
  14 +
  15 +ProductEvent.prototype = {
  16 +
  17 + constructor: ProductEvent,
  18 +
  19 + addHandler: function(type, handler) {
  20 + if (typeof this.handlers[type] === 'undefined') {
  21 + this.handlers[type] = [];
  22 + }
  23 + this.handlers[type].push(handler);
  24 + },
  25 +
  26 + fire: function(event) {
  27 + var handlers,
  28 + i;
  29 +
  30 + if (!event.target) {
  31 +
  32 + event.target = this;
  33 + }
  34 + if (this.handlers[event.type] instanceof Array) {
  35 + handlers = this.handlers[event.type];
  36 + for (i = 0; i < handlers.length; i++) {
  37 + handlers[i](event);
  38 + }
  39 + }
  40 + },
  41 +
  42 + removeHandler: function(type, handler) {
  43 + var handlers,
  44 + i;
  45 +
  46 + if (this.handlers[type] instanceof Array) {
  47 + handlers = this.handlers[type];
  48 + for (i = 0; i < handlers.length; i++) {
  49 + if (handlers[i] === handler) {
  50 + break;
  51 + }
  52 + }
  53 + handlers.splice(i, 1);
  54 + }
  55 + }
  56 +};
  57 +
  58 +module.exports = function($o, rowWidth) {
  59 +
  60 + var pMouseHover = new ProductEvent();
  61 +
  62 + var targetWidth = $o.eq(0).width(),
  63 + targetHeight = $o.eq(0).height(),
  64 + winW = $(window).width();
  65 +
  66 + function handleEvent(event) {
  67 + var $target,
  68 + targetX = 0,
  69 + targetY = 0,
  70 + rowW = rowWidth,
  71 + activeIndex = 0,
  72 + $targetDuplicate = '',
  73 + offsetL = 0,
  74 + offsetR = 0;
  75 +
  76 +
  77 + switch (event.type) {
  78 + case 'mouseenter':
  79 +
  80 + $target = $(this);
  81 + $targetDuplicate = $target.clone();
  82 + activeIndex = $target.index() + 1;
  83 + targetX = (activeIndex % rowW) === 0 ? rowW : activeIndex % rowW;
  84 + targetY = Math.ceil(activeIndex / rowW);
  85 + offsetL = $target.offset().left;
  86 + offsetR = winW - (offsetL + targetWidth);
  87 +
  88 +
  89 + console.log($target.offset().left);
  90 +
  91 + pMouseHover.fire({
  92 + type: 'MouseEnter',
  93 + target: $target,
  94 + targetWidth: targetWidth,
  95 + targetHeight: targetHeight,
  96 + targetX: targetX,
  97 + targetY: targetY,
  98 + rowWidth: rowW,
  99 + activeIndex: activeIndex,
  100 + targetDuplicate: $targetDuplicate,
  101 + offsetL: offsetL,
  102 + offsetR: offsetR
  103 + });
  104 + break;
  105 + case 'mouseleave':
  106 + pMouseHover.fire({
  107 + type: 'MouseLeave'
  108 + });
  109 + break;
  110 + }
  111 + }
  112 +
  113 + $o.bind('mouseenter', handleEvent);
  114 +
  115 + //$o.bind('mouseleave', handleEvent);
  116 +
  117 + return pMouseHover;
  118 +};
@@ -24,13 +24,6 @@ var $brandDefault = $('.brand .default'), @@ -24,13 +24,6 @@ var $brandDefault = $('.brand .default'),
24 24
25 var $brandMoreTxt, $brandMoreIcon; 25 var $brandMoreTxt, $brandMoreIcon;
26 26
27 -//商品相关变量  
28 -var $goodsContainer = $('.goods-container'),  
29 - $goodItem = $goodsContainer.find('.good-info'),  
30 - $goodItemWrapper = $goodsContainer.find('.good-item-wrapper'),  
31 - $goodInfoMain = $goodsContainer.find('.good-info-main'),  
32 - $goodSelectColor = $goodsContainer.find('.good-select-color');  
33 -  
34 //价格相关变量 27 //价格相关变量
35 var $udPrice = $('.ud-price-range'), 28 var $udPrice = $('.ud-price-range'),
36 interReg = /^\d+$/, 29 interReg = /^\d+$/,
@@ -328,100 +321,3 @@ $('.senior-sub').on('click', '.multi-select', function() { @@ -328,100 +321,3 @@ $('.senior-sub').on('click', '.multi-select', function() {
328 } 321 }
329 }); 322 });
330 }()); 323 }());
331 -  
332 -  
333 -/*  
334 - * Description: 商品列表移入效果  
335 - * Added by wangchenglong at 2015/12/1  
336 - */  
337 -  
338 -// 构造html  
339 -function createColorList(data) {  
340 - var colorListStr = '',  
341 - len = data.length,  
342 - row = 4, //每列ul放4个li  
343 - col = Math.ceil(len / row), //需要几**列**ul  
344 - i,  
345 - j,  
346 - index,  
347 - ulNum = 0;  
348 -  
349 - for (i = 0; i < col; i++) {  
350 - colorListStr += '<ul>';  
351 - for (j = 0; j < row; j++) {  
352 - index = i * row + j;  
353 - if (index === len) {  
354 - break;  
355 - }  
356 - colorListStr +=  
357 - '<li>' +  
358 - '<a href="' + data[i * row + j].url + '">' +  
359 - '<img src="' + data[i * row + j].src + '" />' +  
360 - '</a>' +  
361 - '</li>';  
362 -  
363 - if (j === row - 1) {  
364 - colorListStr += '</ul>';  
365 - ulNum++;  
366 - }  
367 - }  
368 - }  
369 - if (ulNum < col) {  
370 - colorListStr += '</ul>';  
371 - }  
372 - return colorListStr;  
373 -}  
374 -  
375 -//todo  
376 -$goodItem.mouseenter(function() {  
377 - var $cloneStr,  
378 - activeIndex,  
379 - X,  
380 - left,  
381 - Y,  
382 - top,  
383 - colNum = 5,  
384 - itemW = 222,  
385 - itemH = 400,  
386 - itemMr = 10,  
387 - itemMb = 35;  
388 -  
389 - activeIndex = $(this).index() + 1;  
390 -  
391 - X = (activeIndex % colNum) === 0 ? colNum : activeIndex % colNum;  
392 - Y = Math.ceil(activeIndex / colNum);  
393 - left = (X - 1) * (itemW + itemMr) + 15 - 21;  
394 - top = (Y - 1) * (itemH + itemMb) + 25 - 19;  
395 -  
396 - $cloneStr = $(this).clone();  
397 -  
398 - $goodInfoMain.html('');  
399 - $goodSelectColor.html('');  
400 - $goodItemWrapper.css({  
401 - display: 'none'  
402 - });  
403 - $.ajax({  
404 - type: 'GET',  
405 - url: '/product/index/productColor',  
406 - dataType: 'json'  
407 - }).then(function(data) {  
408 -  
409 - $goodInfoMain.append($cloneStr);  
410 - $goodSelectColor.append($(createColorList(data)));  
411 - });  
412 -  
413 - $goodItemWrapper.css({  
414 - left: left,  
415 - top: top,  
416 - display: 'inline-block'  
417 - });  
418 -  
419 -});  
420 -  
421 -$goodItemWrapper.mouseleave(function() {  
422 - $goodInfoMain.html('');  
423 - $goodSelectColor.html('');  
424 - $goodItemWrapper.css({  
425 - display: 'none'  
426 - });  
427 -});  
  1 +/**
  2 + *Description: 商品列表页
  3 + *Author: chenglong.wang@yoho.cn
  4 + *Date: 2015/12/2
  5 + */
  6 +
  7 +var $ = require('yoho.jquery'),
  8 + productEvent = require('../common/product-event');
  9 +
  10 +var $goodsContainer = $('.goods-container'),
  11 + $goodItem = $goodsContainer.find('.good-info'),
  12 + $goodItemWrapper = $goodsContainer.find('.good-item-wrapper'),
  13 + $goodInfoMain = $goodsContainer.find('.good-info-main'),
  14 + $goodSelectColor = $goodsContainer.find('.good-select-color');
  15 +
  16 +var MouseOver = productEvent($goodItem, 5);
  17 +
  18 +/**
  19 + * @description 构造商品颜色列表的html结构
  20 + * @param data 商品颜色的数组,[url: '',src: '']
  21 + * @return json {'colorListStr': '', 'ulNum': ''}
  22 + * */
  23 +function createColorList(data) {
  24 + var colorListStr = '',
  25 + len = data.length,
  26 + row = 4, //每列ul放4个li
  27 + col = Math.ceil(len / row), //需要几**列**ul
  28 + i,
  29 + j,
  30 + index,
  31 + ulNum = 0;
  32 +
  33 + for (i = 0; i < col; i++) {
  34 + colorListStr += '<ul>';
  35 + for (j = 0; j < row; j++) {
  36 + index = i * row + j;
  37 + if (index === len) {
  38 + break;
  39 + }
  40 + colorListStr +=
  41 + '<li>' +
  42 + '<a href="' + data[i * row + j].url + '">' +
  43 + '<img src="' + data[i * row + j].src + '" />' +
  44 + '</a>' +
  45 + '</li>';
  46 +
  47 + if (j === row - 1) {
  48 + colorListStr += '</ul>';
  49 + ulNum++;
  50 + }
  51 + }
  52 + }
  53 + if (ulNum < col) {
  54 + colorListStr += '</ul>';
  55 + }
  56 + return {
  57 + colorListStr: colorListStr,
  58 + ulNum: col
  59 + };
  60 +}
  61 +
  62 +MouseOver.addHandler('MouseEnter', function(event) {
  63 +
  64 + var itemMr = 10, //list的右边距
  65 + itemMb = 35, //list的下边距
  66 + ulStr = '',
  67 + ulNum,
  68 + wrapperWidth,
  69 + diffWidth,
  70 + wrapperX = (event.targetX - 1) * (event.targetWidth + itemMr) - 21,
  71 + wrapperY = (event.targetY - 1) * (event.targetHeight + itemMb) + 25 - 19;
  72 +
  73 + $goodInfoMain.html('');
  74 + $goodSelectColor.html('');
  75 + $goodItemWrapper.css({
  76 + display: 'none'
  77 + });
  78 + $.ajax({
  79 + type: 'GET',
  80 + url: '/product/index/productColor',
  81 + dataType: 'json'
  82 + }).then(function(data) {
  83 +
  84 + ulStr = createColorList(data).colorListStr;
  85 + ulNum = createColorList(data).ulNum;
  86 +
  87 + $goodInfoMain.append(event.targetDuplicate);
  88 + $goodSelectColor.append($(ulStr));
  89 + wrapperWidth = 10 + (15 + 50) * ulNum + event.targetWidth;
  90 +
  91 + //
  92 + diffWidth = event.offsetR - ((15 + 50) * ulNum + 25);
  93 + if (diffWidth <= 0) {
  94 + wrapperX = wrapperX + diffWidth;
  95 + }
  96 + $goodItemWrapper.css({
  97 + width: wrapperWidth,
  98 + left: wrapperX,
  99 + top: wrapperY,
  100 + display: 'inline-block'
  101 + });
  102 +
  103 + });
  104 +});
  105 +
  106 +$goodItemWrapper.mouseleave(function() {
  107 + $goodInfoMain.html('');
  108 + $goodSelectColor.html('');
  109 + $goodItemWrapper.css({
  110 + display: 'none'
  111 + });
  112 +});
1 -var jQuery = require('jquery'); 1 +var jQuery = require('yoho.jquery');
2 2
3 (function($) { 3 (function($) {
4 $.extend({ 4 $.extend({
@@ -74,4 +74,4 @@ a:focus { @@ -74,4 +74,4 @@ a:focus {
74 margin-right: auto; 74 margin-right: auto;
75 } 75 }
76 76
77 -@import "home/index", "product/index";  
  77 +@import "home/index", "product/index";
1 -@import "search", "list", "filter-box", "sort-pager";  
  1 +@import "search", "list", "filter-box", "sort-pager";
  2 +.products-page {
  3 + .filter-box {
  4 + border: 1px solid #dfdfdf;
  5 + }
  6 +
  7 + .section {
  8 + padding: 10px 15px;
  9 + font-size: 14px;
  10 + border-top: 1px solid #dfdfdf;
  11 +
  12 + &:first-child {
  13 + border-top: none;
  14 + background: #eaeceb;
  15 + }
  16 + }
  17 +
  18 + .title {
  19 + float: left;
  20 + width: 90px;
  21 + line-height: 30px;
  22 + }
  23 +
  24 + .attr-content {
  25 + margin-left: 90px;
  26 + }
  27 +
  28 + .multi-select {
  29 + display: inline-block;
  30 + width: 60px;
  31 + height: 18px;
  32 + line-height: 18px;
  33 + border: 1px solid #000;
  34 + text-align: center;
  35 + cursor: pointer;
  36 + }
  37 +
  38 + .attr {
  39 + display: block;
  40 + float: left;
  41 + padding: 0 10px;
  42 + margin-right: 30px;
  43 + line-height: 30px;
  44 + cursor: pointer;
  45 +
  46 + &:first-child {
  47 + margin-left: 0;
  48 + }
  49 +
  50 + -moz-user-select: none;
  51 + }
  52 +
  53 + .checked-conditions {
  54 + line-height: 30px;
  55 +
  56 + .tag {
  57 + display: block;
  58 + float: left;
  59 + padding: 0 10px;
  60 + margin-right: 30px;
  61 + background: #000;
  62 + color: #fff;
  63 + cursor: pointer;
  64 + }
  65 +
  66 + .color-block {
  67 + height: 14px;
  68 + width: 14px;
  69 + border: 1px solid #fff;
  70 + margin-bottom: -3px;
  71 + }
  72 +
  73 + .clear-checked {
  74 + color: #999;
  75 + float: right;
  76 + }
  77 + }
  78 +
  79 + .sort-sub-wrap {
  80 + width: 100%;
  81 +
  82 + .sort-sub {
  83 + padding: 15px 0;
  84 + }
  85 + }
  86 +
  87 + .brand {
  88 + position: relative;
  89 +
  90 + .attr {
  91 + box-sizing: border-box;
  92 + width: 20%;
  93 + margin: 0;
  94 + overflow: hidden;
  95 + white-space: nowrap;
  96 + text-overflow: ellipsis;
  97 + }
  98 +
  99 + .attr-content {
  100 + max-width: 900px;
  101 + }
  102 +
  103 + .brand-opt {
  104 + position: absolute;
  105 + right: 20px;
  106 + top: 15px;
  107 + }
  108 +
  109 + .brand-more {
  110 + margin-right: 20px;
  111 + cursor: pointer;
  112 + }
  113 +
  114 + .brands-index {
  115 + float: left;
  116 + line-height: 30px;
  117 +
  118 + span {
  119 + margin: 0 5px;
  120 + cursor: pointer;
  121 + -moz-user-select: none;
  122 +
  123 + &:first-child {
  124 + margin-left: 10px;
  125 + }
  126 + }
  127 + }
  128 +
  129 + .brand-search {
  130 + float: left;
  131 + height: 18px;
  132 + line-height: 18px;
  133 + border: 1px solid #b0b0b0;
  134 + margin-top: 5px;
  135 + margin-left: 15px;
  136 +
  137 + input {
  138 + float: left;
  139 + border: none;
  140 + width: 100px;
  141 + height: 18px;
  142 + padding: 0;
  143 + }
  144 +
  145 + .btn {
  146 + display: inline-block;
  147 + width: 55px;
  148 + height: 18px;
  149 + background: #b0b0b0;
  150 + color: #fff;
  151 + text-align: center;
  152 + cursor: default;
  153 + }
  154 + }
  155 +
  156 + .panel-body {
  157 + padding: 15px 20px;
  158 + margin-top: 5px;
  159 + background: #f4f7f6;
  160 + min-height: 30px;
  161 + border: 1px solid #000;
  162 + }
  163 + }
  164 +
  165 + .btns {
  166 + display: none;
  167 + margin-top: 10px;
  168 + text-align: center;
  169 + }
  170 +
  171 + .multi .btns {
  172 + display: block;
  173 + }
  174 +
  175 + .multi-select-ok, .multi-select-cancel {
  176 + width: 55px;
  177 + height: 24px;
  178 + border: none;
  179 + background: #000;
  180 + color: #fff;
  181 + font-size: 15px;
  182 + margin-right: 15px;
  183 + cursor: pointer;
  184 +
  185 + &.dis {
  186 + background: #ccc;
  187 + }
  188 + }
  189 +
  190 + .ud-price-range {
  191 + margin-top: 2px;
  192 + }
  193 +
  194 + .limit {
  195 + height: 22px;
  196 + width: 42px;
  197 + border: 1px solid #ccc;
  198 + padding: 0;
  199 + }
  200 +
  201 + .price-sep {
  202 + margin: 0 5px;
  203 + }
  204 +
  205 + .price-sure {
  206 + height: 24px;
  207 + width: 44px;
  208 + border: 1px solid #e0e0e0;
  209 + background: #fff;
  210 + color: #666;
  211 + margin-left: 10px;
  212 + }
  213 +
  214 + .color-block {
  215 + display: inline-block;
  216 + height: 22px;
  217 + width: 22px;
  218 + border: 1px solid #ccc;
  219 + margin-bottom: -6px;
  220 + margin-right: 5px;
  221 + }
  222 +
  223 + .senior {
  224 + padding-bottom: 6px;
  225 +
  226 + .attr-content {
  227 + position: relative;
  228 + }
  229 + }
  230 +
  231 + .senior-attr-wrap {
  232 + position: relative;
  233 + }
  234 +
  235 + .senior-attr-wrap > .attr:hover,
  236 + .senior-attr-wrap > .attr.hover {
  237 + > .iconfont {
  238 + visibility: hidden;
  239 + }
  240 +
  241 + .senior-up-icon {
  242 + visibility: visible;
  243 + }
  244 + }
  245 +
  246 + .senior-sub {
  247 + box-sizing: border-box;
  248 + position: absolute;
  249 + padding: 15px 0;
  250 + left: 0;
  251 + right: 0;
  252 + top: 39px;
  253 + background: #fff;
  254 + border: 1px solid #eaeceb;
  255 +
  256 + ul {
  257 + max-width: 950px;
  258 + }
  259 +
  260 + &.multi .multi-select {
  261 + display: none;
  262 + }
  263 +
  264 + .multi-select {
  265 + position: absolute;
  266 + top: 20px;
  267 + right: 15px;
  268 + }
  269 + }
  270 +
  271 + .senior-up-icon {
  272 + width: 100%;
  273 + height: 9px;
  274 + z-index: 1;
  275 + margin-left: -11px;
  276 + visibility: hidden;
  277 +
  278 + background: image-url('product/senior-up.png') no-repeat;
  279 + background-position-x: 50%;
  280 + }
  281 +
  282 + .checkbox {
  283 + display: none;
  284 + }
  285 +
  286 + .multi .checkbox {
  287 + display: inline;
  288 + }
  289 + .opt-banner {
  290 + height: 48px;
  291 + background: #f5f7f6;
  292 + line-height: 48px;
  293 + margin: 10px 0;
  294 +
  295 + .sort-type,
  296 + .checks {
  297 + color: #ccc;
  298 + font-size: 14px;
  299 + padding: 0 10px;
  300 +
  301 + .iconfont {
  302 + font-size: 14px;
  303 + }
  304 +
  305 + &.active,
  306 + &.checked {
  307 + color: #000;
  308 + }
  309 + }
  310 +
  311 + .pager-wrap {
  312 + float: right;
  313 + padding: 15px 0;
  314 + }
  315 +
  316 + .line-count {
  317 + float: left;
  318 + padding: 3px 1px 3px 3px;
  319 + border: 1px solid #ccc;
  320 + margin-right: 10px;
  321 +
  322 + span {
  323 + float: left;
  324 + width: 5px;
  325 + height: 10px;
  326 + background: #ccc;
  327 + margin-right: 2px;
  328 + }
  329 +
  330 + &.active {
  331 + border-color: #222;
  332 + span {
  333 + background: #222;
  334 + }
  335 + }
  336 + }
  337 +
  338 + .page-count {
  339 + position: relative;
  340 + height: 18px;
  341 + float: left;
  342 + font-size: 12px;
  343 + line-height: 18px;
  344 +
  345 + > span {
  346 + float: left;
  347 + display: block;
  348 + width: 42px;
  349 + height: 10px;
  350 + line-height: 10px;
  351 + padding: 3px;
  352 + border: 1px solid #ccc;
  353 + color: #222;
  354 + cursor: pointer;
  355 + margin-right: 10px;
  356 + }
  357 +
  358 + .iconfont {
  359 + font-size: 14px;
  360 + color: #ccc;
  361 + float: right;
  362 + }
  363 +
  364 + > ul {
  365 + position: absolute;
  366 + display: none;
  367 + width: 42px;
  368 + padding: 0 3px;
  369 + border-left: 1px solid #ccc;
  370 + border-right: 1px solid #ccc;
  371 + }
  372 +
  373 + li {
  374 + border-bottom: 1px solid #ccc;
  375 + }
  376 +
  377 + a {
  378 + display: block;
  379 + width: 100%;
  380 + }
  381 + }
  382 +
  383 + .pager {
  384 + float: left;
  385 + font-size: 14px;
  386 + line-height: 15px;
  387 + margin: 0 20px;
  388 +
  389 + .dis-icon {
  390 + color: #e6e6e6;
  391 + }
  392 +
  393 + i {
  394 + color: #f00;
  395 + }
  396 + }
  397 + }
  398 +}
  1 +/*
  2 + *Description: 商品列表
  3 + *Author: chenglong.wang@yoho.cn
  4 + *Date: 2015/12/1
  5 + */
  6 +
1 .product-search-page { 7 .product-search-page {
2 - /*商品列表  
3 - *Added by wangchenglong at 2015/12/1  
4 - */ 8 +
  9 + //todo
  10 +
5 .goods-container { 11 .goods-container {
6 height: auto; 12 height: auto;
7 - padding: 25px 15px 0 15px;  
8 - overflow: hidden; 13 + padding: 25px 0 0 0;
9 position: relative; 14 position: relative;
10 - width: 1150px + 10px; 15 + width: 1150px + 10px;//每列增加右边距
11 16
12 //标签 17 //标签
13 .tag-container { 18 .tag-container {
@@ -153,67 +158,5 @@ @@ -153,67 +158,5 @@
153 margin-right: 10px; 158 margin-right: 10px;
154 } 159 }
155 } 160 }
156 -  
157 - //每行六个商品  
158 - &.six-per-line {  
159 - .good-info {  
160 - height: 400px; //todo  
161 - margin-bottom: 35px;  
162 - width: 222px;  
163 -  
164 - //图片  
165 - .good-detail-img {  
166 - width: 100%;  
167 - height: 300px;  
168 - position: relative;  
169 -  
170 - .good-thumb, img.lazy {  
171 - display: block;  
172 - overflow: hidden;  
173 - width: 100%;  
174 - height: 100%;  
175 - }  
176 - .few-tag {  
177 - width: 100%;  
178 - position: absolute;  
179 - left: 0;  
180 - height: 16px;  
181 - line-height: 16px;  
182 - background: #ffac5b;  
183 - color: #fff;  
184 - font-size: 12px;  
185 - text-align: center;  
186 - bottom: 0;  
187 - }  
188 - }  
189 -  
190 - //文本  
191 - .good-detail-text {  
192 - color: #222;  
193 - font-size: 12px;  
194 - text-align: center;  
195 -  
196 - > a {  
197 - margin-top: 16px;  
198 - line-height: 1.5;  
199 - display: block;  
200 - }  
201 -  
202 - > .price {  
203 - margin-top: 10px;  
204 - }  
205 - }  
206 -  
207 - .col-btn {  
208 - position: absolute;  
209 - top: 15px;  
210 - right: 15px;  
211 - color: #ccc;  
212 - font-size: 12px;  
213 - display: none;  
214 - }  
215 - }  
216 - }  
217 } 161 }
218 - //商品列表END  
219 } 162 }