Укладка двух картинок с подписями рядом и по центру в Wordpress - PullRequest
3 голосов
/ 20 мая 2010

это сводит меня с ума. Я не самый опытный с CSS, поэтому я надеюсь, что это что-то простое.

Я использую Wordpress 2.9.2 с темой «Утро после».

Я пытаюсь написать пост, в котором я хочу отобразить две маленькие картинки с подписями, расположенными рядом и по центру в середине страницы.

Вот код HTML, который я использую для отображения изображений:

[caption align="alignnone" width="150" caption="Protein rest"]
<a href="http://www.mysite.com/wp-content/uploads/2008/06/protein-rest.jpg">
<img title="Mash during protein rest" src="http://www.mysite.com/wp-content/uploads/2008/06/protein-rest-150x144.jpg" alt="Mash during protein rest" width="150" height="144" />
</a>[/caption]
[caption align="alignnone" width="143" caption="Saccharification rest" captionalign="center"]
<a href="http://www.mysite.com/wp-content/uploads/2008/06/saccharification-rest.jpg">
<img  title="Mash during saccharification rest" src="http://www.mysite.com/wp-content/uploads/2008/06/saccharification-rest-143x150.jpg" alt="Mash during saccharification rest" width="143" height="150" />
</a>[/caption]

Я попытался использовать «aligncenter» и «alignleft» для выравнивания надписи - если я использую «alignleft», картинки выровняются идеально, но полностью слева от страницы. Если я использую «aligncenter», то картинки находятся в центре, но накладываются друг на друга.

Моей первой мыслью было обернуть изображения в div с помощью:

<div style="text-align:center;">image code</div>

но это не работает. Теперь, если я оберну подобное центрированное деление и опущу теги [caption], это сработает, но мне нужны подписи. Эти теги заголовков переведены Wordpress в собственный div класса wp-caption. Я также попытался обернуть каждое отдельное изображение в свой собственный div в обертке с родительским центром div.

Вот соответствующие части style.css - пожалуйста, дайте мне знать, если вам нужна какая-либо другая информация, и если вы можете мне помочь, я откладываю прыжок с ближайшего моста!

Спасибо !!

style.css:

.aligncenter, div.aligncenter { display: block; margin: 14px auto; }
.alignleft { float: left; margin: 0 14px 10px 0; }
.alignright { float: right; margin: 0 0 10px 14px; }
.wp-caption { border: 1px solid #ddd; text-align: center; background-color: #f3f3f3; padding-top: 4px; /* optional rounded corners for browsers that support it */ -moz-border-radius: 3px; -khtml-border-radius: 3px;  -webkit-border-radius: 3px; border-radius: 3px; }
.wp-caption img { margin: 0; padding: 0; border: 0 none; }
.wp-caption p.wp-caption-text { font-size: 11px; line-height: 14px; padding: 5px 4px 5px 5px; margin: 0; }

PS. Мне известна функция галереи, доступная в Wordpress, но я бы хотел ее избежать и хотел бы понять, почему перенос в div не перемещает весь набор в центр.

Наконец, просто для полноты, вот источник страницы при загрузке с использованием div-оболочки и кода изображения, как указано выше (так что вы можете увидеть, как Wordpress транслирует теги заголовка):

<div style="text-align:center;">
<div class="wp-caption alignnone" style="width: 160px">
<a href="http://www.mysite.com/wp-content/uploads/2008/06/protein-rest.jpg">
<img title="Mash during protein rest" src="http://www.mysite.com/wp-content/uploads/2008/06/protein-rest-150x144.jpg" alt="Mash during protein rest" width="150" height="144" />
</a>
<p class="wp-caption-text" style="text-align:center">Protein rest</p>
</div>
<div class="wp-caption alignnone" style="width: 153px">
<a href="http://www.mysite.com/wp-content/uploads/2008/06/saccharification-rest.jpg">
<img  title="Mash during saccharification rest" src="http://www.mysite.com/wp-content/uploads/2008/06/saccharification-rest-143x150.jpg" alt="Mash during saccharification rest" width="143" height="150" />
</a>
<p class="wp-caption-text" style="text-align:center">Saccharification rest</p>
</div>
</div>

Ответы [ 4 ]

4 голосов
/ 20 мая 2010

Я не уверен, что вы ищете

  1. Быстрое исправление в редакторе Wordpress с использованием заголовка и HTML-кода
  2. Быстрое исправление в редакторе Wordpress html, воссоздающий код заголовка вручную
  3. Постоянное исправление через файл functions.php и add_shortcode () в wp-includes / media.php
  4. Постоянное исправление с помощью CSS, которое может повлиять на все заголовки.

Я даю 1, сохраняя ваш код как можно более нетронутым

<div style="text-align:center;">
// This should align the entire block [it worked for me at least]
    <div style="display:inline-block;">
        <div style="float:left;">
        // Takes care of the centering down the middle
            [caption align="aligncenter" width="150" caption="Protein rest"]
<a href="http://www.mysite.com/wp-content/uploads/2008/06/protein-rest.jpg">
<img title="Mash during protein rest" src="http://www.mysite.com/wp-content/uploads/2008/06/protein-rest-150x144.jpg" alt="Mash during protein rest" width="150" height="144" />
</a>[/caption]
        //Your caption code above with alignnone changed to aligncenter
        </div>
        <div style="float:left;">
            [caption align="aligncenter" width="143" caption="Saccharification rest" captionalign="center"]
<a href="http://www.mysite.com/wp-content/uploads/2008/06/saccharification-rest.jpg">
<img  title="Mash during saccharification rest" src="http://www.mysite.com/wp-content/uploads/2008/06/saccharification-rest-143x150.jpg" alt="Mash during saccharification rest" width="143" height="150" />
</a>[/caption]
        </div>
    </div> // End the Block Div
</div> // End the Center Div

[РЕДАКТИРОВАТЬ: Только что видел, что вы ответили -.- в любом случае сообщение: D]

1 голос
/ 20 мая 2010

Проблема, с которой вы можете столкнуться, заключается в том, что контейнер div действует как окно автоматического определения размера. Поэтому, когда вы указываете ему выравнивать центр, он автоматически замечает, что он должен растягиваться вниз (потому что это поток страницы), если вы задаете ширину контейнера div, а затем размещаете изображения внутри контейнера div и центрируете div на странице он будет делать то, что вы хотите. На основе вашего кода это небольшой фрагмент того, как он должен выглядеть в html:

<center>
<div width="300">
<a href="http://www.mysite.com/wp-content/uploads/2008/06/protein-rest.jpg">
<img title="Mash during protein rest" src="http://www.mysite.com/wp-content/uploads/2008/06/protein-rest-150x144.jpg" alt="Mash during protein rest" width="150" height="144" />
</a>
<a href="http://www.mysite.com/wp-content/uploads/2008/06/saccharification-rest.jpg">
<img  title="Mash during saccharification rest" src="http://www.mysite.com/wp-content/uploads/2008/06/saccharification-rest-143x150.jpg" alt="Mash during saccharification rest" width="143" height="150" />
</a>
</div>
</center>

Я знаю, что вы искали CSS, но это займет немного больше времени, и я просто выхожу за дверь на работе.

Надеюсь, это поможет и удачи. -Gale

0 голосов
/ 20 мая 2010

Не уверен, что это правильный этикет стека, чтобы ответить на мой собственный пост дважды (!), Но я хотел выложить этот код на тот случай, если он кому-нибудь поможет.

Вот пользовательская функция (вставьте в файл function.php вашей темы Wordpress) и сопровождающие ее элементы CSS, которые позволят вам использовать шорткод для размещения двух изображений рядом и выравнивания их по левому, правому краю или по центру (по умолчанию) является центром, если выравнивание не указано).

Он закодирован для двух изображений, но его можно легко изменить, чтобы обрабатывать больше. Также требуется, чтобы вы использовали теги [caption] на изображениях, поскольку это то, для чего я нуждался (и для чего разбивается строка), но я мог бы конкретизировать это позже, чтобы иметь дело с различными ситуациями.

По сути, он анализирует код изображения между вашими новыми тегами [side_by_side] и разбивает его на [/ caption], создавая массив, в котором каждый элемент представляет собой одно изображение. Он анализирует ширину (поскольку каждый тег изображения имеет две указанные ширины - заголовок и фактическое изображение - он проверяет, какая из них больше, и использует эту), а затем генерирует код с правильными размерами div.

Очевидно, что это не решение «поймать все», иначе я бы загрузил его как плагин! Он был закодирован для моих специфических потребностей, но его можно изменить для ваших конкретных нужд с небольшим перекодированием. Используйте с моего благословения, я не несу никакой ответственности за то, что это может сделать для вашего сайта :) PS - Я знаю, что использование регулярных выражений, как правило, плохая форма для разбора HTML, но в моем случае это была такая маленькая мелкомасштабная работа, которую я не делал думаю, это будет проблемой. Если кто-то хочет оптимизировать / перекодировать, дайте мне знать, я просто научил себя достаточно PHP, чтобы сделать это сегодня, ни в коем случае не эксперт ...

/* CUSTOM FUNCTION ADDED BY JIM - 5/20/2010 TO ALLOW CENTERING SIDE-BY-SIDE IMAGES */

add_shortcode('side_by_side', 'side_by_side');

function side_by_side($attr, $content = null) {

extract(shortcode_atts(array(
    'align' => 'center'
), $attr));

$images = explode( "[/caption]", $content, -1);
foreach($images as &$image)
{
    $image = $image.'[/caption]';
}

$img = array();
foreach($images as $img_tag)
{
preg_match_all('/width=\"(.*?)\"/i', $img_tag, $img[$img_tag]);
}

$widths = array();

for ($i = 0; $i < count($images); $i++)
{
    $firstval = $img[($images[$i])][1][0];
    $secondval = $img[($images[$i])][1][1];
    if ($firstval >= secondval)
        $widths[$i]=$firstval;
    else
        $widths[$i]=$secondval;
}

return '<div class="main-img-wrap wrap' . esc_attr($align) . '" style="max-width: ' . (24 + (int) $widths[0] + (int) $widths[1]) . 'px"><div class="sub-img-wrap" style="width: '
. (12 + (int) $widths[0]) . 'px">' . do_shortcode( $images[0] ) . '</div><div style="margin-left: ' . (12 + (int) $widths[0]) . '">' . do_shortcode( $images[1] ) . '</div></div>';
}

И элементы CSS:

/* centered side-by-side image wrappers, added by Jim 5/20/2010 */

.main-img-wrap {} /* left blank for future style enhancements */
.sub-img-wrap {float: left;}
.wrapcenter {margin: 0 auto;}
.wrapright {float: right; margin: 0 0 10px 14px;}
.wrapleft { float: left; margin: 0 14px 10px 0; }
0 голосов
/ 20 мая 2010

Что ж, после долгих раздумий я наконец-то заработал.

Я создал несколько новых элементов CSS следующим образом:

.stackwrapper {max-width: 311px;margin: 0 auto;}
#div1 {width: 162px;float: left;}
#div2 {margin-left: 162px;}

Поймите, что это было написано, чтобы соответствовать моимнепосредственные требования, поэтому ширину жестко закодировали для поста, над которым я работал.По сути, одно изображение имеет ширину 150 пикселей, а другое - 137 пикселей.Код подписи добавляет отступы в 5 пикселей и границу в 1 пиксель к каждому, поэтому общая ширина для моих изображений рядом составляет 311 пикселей (ширина изображения + 10 пикселей для L & R на изображение + 2 пикселя для каждого изображения).

оболочкаустановите эту ширину и поле: 0 auto, кажется, центрирует его (хотя не совсем уверен, почему ... кто-нибудь может подсказать мне?)

Затем я обертываю image1 в div1 (с его image + padding + borderwidth) и image2 в div2 (с полем margin-left, равным ширине первого изображения)

Кажется, что это прекрасно работает, теперь мне нужно закодировать его в шорткод WordPress, чтобы я мог указать ширину изображения и получить егогенерируйте html на лету.

Благодаря Гейлу, вы заставили меня задуматься о настройке ширины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...