#html #css #image
#HTML #css #изображение
Вопрос:
На самом деле это не форма заказа (пока), но я думаю, что это лучше всего описывает ее. Я хочу создать сетку из 3 встроенных изображений, затем текст под каждым, затем повторять бесконечно. Я попытался превратить каждую строку в уникальную таблицу, но выравнивание стало проблемой. Затем я попытался создать одну таблицу и присвоить уникальным классам image и text < tr >, но у меня возникли проблемы с уменьшением высоты текстовых строк до более эстетичного размера, а также с центрированием текста под изображением. Я попытался сделать это искусственно, используя столько «amp; nbsp», сколько было необходимо, но затем текст начал переноситься на новую строку, и это все испортило. Ниже приведен код и ссылка на js fiddle:
<table id="saladGrid">
<tr class="saladPics">
<td id="one"></td>
<td id="two"></td>
<td id="three"></td>
</tr>
<tr class="saladText">
<td class="text"><p>amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp; acorn squash, golden beets, pistachios</p></td>
<td class="text"><p>amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp; roasted eggplant, herbed ricotta, sumac</p></td>
<td class="text"><p>amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp; arugula, fennel, blackberries, quinoa, pickled shallots</p></td>
</tr>
http://jsfiddle.net/jshweky/5bTW8/
(Кстати, я новичок в stackoverload, поэтому, если есть какой-либо протокол, которому я не следую в отношении публикации, я был бы благодарен за любые советы / предложения. Спасибо!)
Комментарии:
1. Центрируйте текст с помощью text-align:center; в вашем классе text Таким образом вы получите желаемый эффект.
Ответ №1:
Взгляните на это: http://jsfiddle.net/EX9f9 /
Если вы посмотрите на приведенный ниже код, вы заметите несколько вещей:
HTML
<table id="saladGrid">
<tr class="saladPics">
<td class="s1"></td> //I changed your classes 'one','two',etc
<td class="s2"></td>
<td class="s3"></td>
</tr>
<tr class="saladTxt">
<td class="txt"><p>acorn squash, golden beets, pistachios</p></td>
<td class="txt"><p>roasted eggplant, herbed ricotta, sumac</p></td>
<td class="txt"><p>arugula, fennel, blackberries, quinoa, pickled shallots</p></td>
</tr>
</table>
- В вашем HTML я изменил ваши
id
one
,two
, и т. Д. На классы, состоящие из одного и того же слова / буквы, только другого номера, для лучшей читаемости. (Это также может быть идентификатор, кстати, главное — использовать равные термины только с одним отличием)
CSS
table {
width: 100%;
height: 100%;
margin: 0px;
padding: 0px;
border: 0px;
border-spacing: 0px;
}
td {
margin: 0px;
padding: 0px;
border: 0px;
text-align: center;
vertical-align: middle;
}
#saladGrid {
width: 600px;
height: 400px;
}
#saladGrid table {
margin: 0 auto;
border-spacing: 30px;
}
.saladPics td {
width: 350px;
height: 350px;
background-position: center;
background-size: 350px 350px;
background-repeat: no-repeat;
border-radius: 50px;
}
.saladPics td.s1 {background-image:url("http://i1281.photobucket.com/albums/a514/jshweky/Gourmade to Order/IMG_1989_zps38d802a7.jpg");}
.saladPics td.s2 {background-image:url("http://i1281.photobucket.com/albums/a514/jshweky/Gourmade to Order/IMG_1483_zpsc4ca87cf.jpg");}
.saladPics td.s3 {background-image:url("http://i1281.photobucket.com/albums/a514/jshweky/Gourmade to Order/IMG_1992_zps1b881869.jpg");}
- В вашем CSS я удалил все повторяющиеся объявления и объединил их в один перекрывающийся класс. Теперь только фоновое изображение имеет отдельное правило для каждого отдельного элемента.
- Я удалил пару правил, которые вам не нужны (и, вероятно, добавлены в неудачной попытке оформить таблицу по своему вкусу).
- В начале я добавил два правила:
table
иtd
. Это два общих класса, которые я всегда помещаю в начало своего CSS, ничего страшного, если вы позже перепишете некоторые из них другими правилами, это просто гарантирует, что браузер не будет делать никаких проблем. - Я поместил всю таблицу в a
div
, чтобы показать вам, как указать размер таблицы (но обратите внимание, что высота все равно больше, чем400px
я ей дал). -
Обратите внимание на
text-align:center;
иvertical-align: middle;
вtd
правиле. Они освещают ваш текст по горизонтали и вертикали. (Ответ на ваш главный вопрос) -
ВАЖНО:
vertical-align:middle;
работает только с таблицами, никаких других элементов. Имейте это в виду!
О вашей первой проблеме:
«… проблемы с уменьшением высоты строк текста до более эстетичного размера …»
К сожалению, это свойство таблицы: она будет формироваться в соответствии с содержимым и пространством, которое она занимает на странице. Он заполнит каждый полученный дюйм и автоматически растянется, чтобы соответствовать содержимому. Вы НЕ МОЖЕТЕ (насколько я знаю) ограничить размер одной строки таблицы.
Единственным решением было бы поместить таблицу в div и ограничить высоту div так, чтобы вся таблица была сжата вместе, и даже тогда я не мог бы точно сказать вам, как будет вести себя таблица.. вы загоняете его в крошечный уголок, и никто не знает, что он будет делать:)