В зависимости от деталей вашей ситуации, вы можете уйти с помощью CSS3 border-image- * rules . Например, я эффективно использовал их, чтобы поместить «фиктивные кнопки поиска» в строку фильтра виджета CGridView в yii (щелчок в любом месте за пределами полей ввода фильтра вызовет вызов ajax, но эти «кнопки» дают пользователю что-то интуитивно понятное для выполнения ). Для меня не стоило создавать подкласс виджета CGridColumn только для того, чтобы взломать html в его методе renderFilterCell () * - я хотел чисто решение CSS.
.myclass .grid-view .items {
border-collapse: separate ;
}
.myclass .grid-view .filters td + td {
border-image-source: url("/path/to/my/img_32x32.png");
border-image-slice: 0 0 0 100%;
border-image-width: 0 0 0 32;
border-image-outset: 0 0 0 40px;
border-width: 1px;
}
.myclass .grid-view .filters input {
width: 80%;
}
В значениях border-image-width есть небольшая хитрость - 32 является множителем , а не длиной (не указывайте px) единицы измерения, используемой в border-width (т.е. 1px). Результатом являются поддельные кнопки в первых n-1 столбцах вида сетки. В моем случае мне ничего не нужно было в последнем столбце, потому что это CButtonsColumn, в котором нет поля фильтра. В любом случае, я надеюсь, что это поможет людям, которые ищут чистое решение CSS & # x1F600; : -D
* Вскоре после написания этого я обнаружил, что могу просто объединить код для изображения в свойстве 'filter' массива, использованного для построения CGridColumn, поэтому мое обоснование оказывается спорным. Плюс, кажется, есть проблема (в любом случае в Firefox) с принудительным растягиванием border-image-repeat, даже когда задано пространство. Тем не менее, может быть, это кому-то пригодится & # x1F615; : - \